//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS SSOAdmin service.
///
/// IAM Identity Center is the Amazon Web Services solution for connecting your workforce users to Amazon Web Services managed applications and other Amazon Web Services resources. You can connect your existing identity provider and synchronize users and groups from your directory, or create and manage your users directly in IAM Identity Center. You can then use IAM Identity Center for either or both of the following:   User access to applications   User access to Amazon Web Services accounts   This guide provides information about single sign-on operations that you can use for access to applications and Amazon Web Services accounts. For information about IAM Identity Center features, see the IAM Identity Center User Guide.  IAM Identity Center uses the sso and identitystore API namespaces.  Many API operations for IAM Identity Center rely on identifiers for users and groups, known as principals. For more information about how to work with principals and principal IDs in IAM Identity Center, see the Identity Store API Reference.  Amazon Web Services provides SDKs that consist of libraries and sample code for various programming languages and platforms (Java, Ruby, .Net, iOS, Android, and more). The SDKs provide a convenient way to create programmatic access to IAM Identity Center and other Amazon Web Services services. For more information about the Amazon Web Services SDKs, including how to download and install them, see Tools for Amazon Web Services.
public struct SSOAdmin: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the SSOAdmin client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            amzTarget: "SWBExternalService",
            serviceName: "SSOAdmin",
            serviceIdentifier: "sso",
            serviceProtocol: .json(version: "1.1"),
            apiVersion: "2020-07-20",
            endpoint: endpoint,
            serviceEndpoints: Self.serviceEndpoints,
            variantEndpoints: Self.variantEndpoints,
            errorType: SSOAdminErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }


    /// custom endpoints for regions
    static var serviceEndpoints: [String: String] {[
        "us-gov-east-1": "sso.us-gov-east-1.amazonaws.com",
        "us-gov-west-1": "sso.us-gov-west-1.amazonaws.com"
    ]}


    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.fips]: .init(endpoints: [
            "us-gov-east-1": "sso.us-gov-east-1.amazonaws.com",
            "us-gov-west-1": "sso.us-gov-west-1.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Attaches the specified customer managed policy to the specified PermissionSet.
    @Sendable
    @inlinable
    public func attachCustomerManagedPolicyReferenceToPermissionSet(_ input: AttachCustomerManagedPolicyReferenceToPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AttachCustomerManagedPolicyReferenceToPermissionSetResponse {
        try await self.client.execute(
            operation: "AttachCustomerManagedPolicyReferenceToPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches the specified customer managed policy to the specified PermissionSet.
    ///
    /// Parameters:
    ///   - customerManagedPolicyReference: Specifies the name and path of a customer managed policy. You must have an IAM policy that matches the name and path in each Amazon Web Services account where you want to deploy your permission set.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed.
    ///   - permissionSetArn: The ARN of the PermissionSet.
    ///   - logger: Logger use during operation
    @inlinable
    public func attachCustomerManagedPolicyReferenceToPermissionSet(
        customerManagedPolicyReference: CustomerManagedPolicyReference,
        instanceArn: String,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AttachCustomerManagedPolicyReferenceToPermissionSetResponse {
        let input = AttachCustomerManagedPolicyReferenceToPermissionSetRequest(
            customerManagedPolicyReference: customerManagedPolicyReference, 
            instanceArn: instanceArn, 
            permissionSetArn: permissionSetArn
        )
        return try await self.attachCustomerManagedPolicyReferenceToPermissionSet(input, logger: logger)
    }

    /// Attaches an Amazon Web Services managed policy ARN to a permission set.  If the permission set is already referenced by one or more account assignments, you will need to call  ProvisionPermissionSet  after this operation. Calling ProvisionPermissionSet applies the corresponding IAM policy updates to all assigned accounts.
    @Sendable
    @inlinable
    public func attachManagedPolicyToPermissionSet(_ input: AttachManagedPolicyToPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AttachManagedPolicyToPermissionSetResponse {
        try await self.client.execute(
            operation: "AttachManagedPolicyToPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches an Amazon Web Services managed policy ARN to a permission set.  If the permission set is already referenced by one or more account assignments, you will need to call  ProvisionPermissionSet  after this operation. Calling ProvisionPermissionSet applies the corresponding IAM policy updates to all assigned accounts.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - managedPolicyArn: The Amazon Web Services managed policy ARN to be attached to a permission set.
    ///   - permissionSetArn: The ARN of the PermissionSet that the managed policy should be attached to.
    ///   - logger: Logger use during operation
    @inlinable
    public func attachManagedPolicyToPermissionSet(
        instanceArn: String,
        managedPolicyArn: String,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AttachManagedPolicyToPermissionSetResponse {
        let input = AttachManagedPolicyToPermissionSetRequest(
            instanceArn: instanceArn, 
            managedPolicyArn: managedPolicyArn, 
            permissionSetArn: permissionSetArn
        )
        return try await self.attachManagedPolicyToPermissionSet(input, logger: logger)
    }

    /// Assigns access to a principal for a specified Amazon Web Services account using a specified permission set.  The term principal here refers to a user or group that is defined in IAM Identity Center.   As part of a successful CreateAccountAssignment call, the specified permission set will automatically be provisioned to the account in the form of an IAM policy. That policy is attached to the IAM role created in IAM Identity Center. If the permission set is subsequently updated, the corresponding IAM policies attached to roles in your accounts will not be updated automatically. In this case, you must call  ProvisionPermissionSet  to make these updates.    After a successful response, call DescribeAccountAssignmentCreationStatus to describe the status of an assignment creation request.
    @Sendable
    @inlinable
    public func createAccountAssignment(_ input: CreateAccountAssignmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateAccountAssignmentResponse {
        try await self.client.execute(
            operation: "CreateAccountAssignment", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Assigns access to a principal for a specified Amazon Web Services account using a specified permission set.  The term principal here refers to a user or group that is defined in IAM Identity Center.   As part of a successful CreateAccountAssignment call, the specified permission set will automatically be provisioned to the account in the form of an IAM policy. That policy is attached to the IAM role created in IAM Identity Center. If the permission set is subsequently updated, the corresponding IAM policies attached to roles in your accounts will not be updated automatically. In this case, you must call  ProvisionPermissionSet  to make these updates.    After a successful response, call DescribeAccountAssignmentCreationStatus to describe the status of an assignment creation request.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - permissionSetArn: The ARN of the permission set that the admin wants to grant the principal access to.
    ///   - principalId: An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the IAM Identity Center Identity Store API Reference.
    ///   - principalType: The entity type for which the assignment will be created.
    ///   - targetId: TargetID is an Amazon Web Services account identifier, (For example, 123456789012).
    ///   - targetType: The entity type for which the assignment will be created.
    ///   - logger: Logger use during operation
    @inlinable
    public func createAccountAssignment(
        instanceArn: String,
        permissionSetArn: String,
        principalId: String,
        principalType: PrincipalType,
        targetId: String,
        targetType: TargetType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateAccountAssignmentResponse {
        let input = CreateAccountAssignmentRequest(
            instanceArn: instanceArn, 
            permissionSetArn: permissionSetArn, 
            principalId: principalId, 
            principalType: principalType, 
            targetId: targetId, 
            targetType: targetType
        )
        return try await self.createAccountAssignment(input, logger: logger)
    }

    /// Creates an OAuth 2.0 customer managed application in IAM Identity Center for the given application provider.  This API does not support creating SAML 2.0 customer managed applications or Amazon Web Services managed applications. To learn how to create an Amazon Web Services managed application, see the application user guide. You can create a SAML 2.0 customer managed application in the Amazon Web Services Management Console only. See Setting up customer managed SAML 2.0 applications. For more information on these application types, see Amazon Web Services managed applications.
    @Sendable
    @inlinable
    public func createApplication(_ input: CreateApplicationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateApplicationResponse {
        try await self.client.execute(
            operation: "CreateApplication", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an OAuth 2.0 customer managed application in IAM Identity Center for the given application provider.  This API does not support creating SAML 2.0 customer managed applications or Amazon Web Services managed applications. To learn how to create an Amazon Web Services managed application, see the application user guide. You can create a SAML 2.0 customer managed application in the Amazon Web Services Management Console only. See Setting up customer managed SAML 2.0 applications. For more information on these application types, see Amazon Web Services managed applications.
    ///
    /// Parameters:
    ///   - applicationProviderArn: The ARN of the application provider under which the operation will run.
    ///   - clientToken: Specifies a unique, case-sensitive ID that you provide to ensure the idempotency of the request. This lets you safely retry the request without accidentally performing the same operation a second time. Passing the same value to a later call to an operation requires that you also pass the same value for all other parameters. We recommend that you use a UUID type of value. If you don't provide this value, then Amazon Web Services generates a random one for you. If you retry the operation with the same ClientToken, but with different parameters, the retry fails with an IdempotentParameterMismatch error.
    ///   - description: The description of the .
    ///   - instanceArn: The ARN of the instance of IAM Identity Center under which the operation will run. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - name: The name of the .
    ///   - portalOptions: A structure that describes the options for the portal associated with an application.
    ///   - status: Specifies whether the application is enabled or disabled.
    ///   - tags: Specifies tags to be attached to the application.
    ///   - logger: Logger use during operation
    @inlinable
    public func createApplication(
        applicationProviderArn: String,
        clientToken: String? = CreateApplicationRequest.idempotencyToken(),
        description: String? = nil,
        instanceArn: String,
        name: String,
        portalOptions: PortalOptions? = nil,
        status: ApplicationStatus? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateApplicationResponse {
        let input = CreateApplicationRequest(
            applicationProviderArn: applicationProviderArn, 
            clientToken: clientToken, 
            description: description, 
            instanceArn: instanceArn, 
            name: name, 
            portalOptions: portalOptions, 
            status: status, 
            tags: tags
        )
        return try await self.createApplication(input, logger: logger)
    }

    /// Grant application access to a user or group.
    @Sendable
    @inlinable
    public func createApplicationAssignment(_ input: CreateApplicationAssignmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateApplicationAssignmentResponse {
        try await self.client.execute(
            operation: "CreateApplicationAssignment", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Grant application access to a user or group.
    ///
    /// Parameters:
    ///   - applicationArn: The ARN of the application for which the assignment is created.
    ///   - principalId: An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the IAM Identity Center Identity Store API Reference.
    ///   - principalType: The entity type for which the assignment will be created.
    ///   - logger: Logger use during operation
    @inlinable
    public func createApplicationAssignment(
        applicationArn: String,
        principalId: String,
        principalType: PrincipalType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateApplicationAssignmentResponse {
        let input = CreateApplicationAssignmentRequest(
            applicationArn: applicationArn, 
            principalId: principalId, 
            principalType: principalType
        )
        return try await self.createApplicationAssignment(input, logger: logger)
    }

    /// Creates an instance of IAM Identity Center for a standalone Amazon Web Services account that is not managed by Organizations or a member Amazon Web Services account in an organization. You can create only one instance per account and across all Amazon Web Services Regions. The CreateInstance request is rejected if the following apply:    The instance is created within the organization management account.   An instance already exists in the same account.
    @Sendable
    @inlinable
    public func createInstance(_ input: CreateInstanceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateInstanceResponse {
        try await self.client.execute(
            operation: "CreateInstance", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an instance of IAM Identity Center for a standalone Amazon Web Services account that is not managed by Organizations or a member Amazon Web Services account in an organization. You can create only one instance per account and across all Amazon Web Services Regions. The CreateInstance request is rejected if the following apply:    The instance is created within the organization management account.   An instance already exists in the same account.
    ///
    /// Parameters:
    ///   - clientToken: Specifies a unique, case-sensitive ID that you provide to ensure the idempotency of the request. This lets you safely retry the request without accidentally performing the same operation a second time. Passing the same value to a later call to an operation requires that you also pass the same value for all other parameters. We recommend that you use a UUID type of value. If you don't provide this value, then Amazon Web Services generates a random one for you. If you retry the operation with the same ClientToken, but with different parameters, the retry fails with an IdempotentParameterMismatch error.
    ///   - name: The name of the instance of IAM Identity Center.
    ///   - tags: Specifies tags to be attached to the instance of IAM Identity Center.
    ///   - logger: Logger use during operation
    @inlinable
    public func createInstance(
        clientToken: String? = CreateInstanceRequest.idempotencyToken(),
        name: String? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateInstanceResponse {
        let input = CreateInstanceRequest(
            clientToken: clientToken, 
            name: name, 
            tags: tags
        )
        return try await self.createInstance(input, logger: logger)
    }

    /// Enables the attributes-based access control (ABAC) feature for the specified IAM Identity Center instance. You can also specify new attributes to add to your ABAC configuration during the enabling process. For more information about ABAC, see Attribute-Based Access Control in the IAM Identity Center User Guide.  After a successful response, call DescribeInstanceAccessControlAttributeConfiguration to validate that InstanceAccessControlAttributeConfiguration was created.
    @Sendable
    @inlinable
    public func createInstanceAccessControlAttributeConfiguration(_ input: CreateInstanceAccessControlAttributeConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateInstanceAccessControlAttributeConfigurationResponse {
        try await self.client.execute(
            operation: "CreateInstanceAccessControlAttributeConfiguration", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enables the attributes-based access control (ABAC) feature for the specified IAM Identity Center instance. You can also specify new attributes to add to your ABAC configuration during the enabling process. For more information about ABAC, see Attribute-Based Access Control in the IAM Identity Center User Guide.  After a successful response, call DescribeInstanceAccessControlAttributeConfiguration to validate that InstanceAccessControlAttributeConfiguration was created.
    ///
    /// Parameters:
    ///   - instanceAccessControlAttributeConfiguration: Specifies the IAM Identity Center identity store attributes to add to your ABAC configuration. When using an external identity provider as an identity source, you can pass attributes through the SAML assertion. Doing so provides an alternative to configuring attributes from the IAM Identity Center identity store. If a SAML assertion passes any of these attributes, IAM Identity Center will replace the attribute value with the value from the IAM Identity Center identity store.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed.
    ///   - logger: Logger use during operation
    @inlinable
    public func createInstanceAccessControlAttributeConfiguration(
        instanceAccessControlAttributeConfiguration: InstanceAccessControlAttributeConfiguration,
        instanceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateInstanceAccessControlAttributeConfigurationResponse {
        let input = CreateInstanceAccessControlAttributeConfigurationRequest(
            instanceAccessControlAttributeConfiguration: instanceAccessControlAttributeConfiguration, 
            instanceArn: instanceArn
        )
        return try await self.createInstanceAccessControlAttributeConfiguration(input, logger: logger)
    }

    /// Creates a permission set within a specified IAM Identity Center instance.  To grant users and groups access to Amazon Web Services account resources, use  CreateAccountAssignment .
    @Sendable
    @inlinable
    public func createPermissionSet(_ input: CreatePermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreatePermissionSetResponse {
        try await self.client.execute(
            operation: "CreatePermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a permission set within a specified IAM Identity Center instance.  To grant users and groups access to Amazon Web Services account resources, use  CreateAccountAssignment .
    ///
    /// Parameters:
    ///   - description: The description of the PermissionSet.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - name: The name of the PermissionSet.
    ///   - relayState: Used to redirect users within the application during the federation authentication process.
    ///   - sessionDuration: The length of time that the application user sessions are valid in the ISO-8601 standard.
    ///   - tags: The tags to attach to the new PermissionSet.
    ///   - logger: Logger use during operation
    @inlinable
    public func createPermissionSet(
        description: String? = nil,
        instanceArn: String,
        name: String,
        relayState: String? = nil,
        sessionDuration: String? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreatePermissionSetResponse {
        let input = CreatePermissionSetRequest(
            description: description, 
            instanceArn: instanceArn, 
            name: name, 
            relayState: relayState, 
            sessionDuration: sessionDuration, 
            tags: tags
        )
        return try await self.createPermissionSet(input, logger: logger)
    }

    /// Creates a connection to a trusted token issuer in an instance of IAM Identity Center. A trusted token issuer enables trusted identity propagation to be used with applications that authenticate outside of Amazon Web Services. This trusted token issuer describes an external identity provider (IdP) that can generate claims or assertions in the form of access tokens for a user. Applications enabled for IAM Identity Center can use these tokens for authentication.
    @Sendable
    @inlinable
    public func createTrustedTokenIssuer(_ input: CreateTrustedTokenIssuerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateTrustedTokenIssuerResponse {
        try await self.client.execute(
            operation: "CreateTrustedTokenIssuer", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a connection to a trusted token issuer in an instance of IAM Identity Center. A trusted token issuer enables trusted identity propagation to be used with applications that authenticate outside of Amazon Web Services. This trusted token issuer describes an external identity provider (IdP) that can generate claims or assertions in the form of access tokens for a user. Applications enabled for IAM Identity Center can use these tokens for authentication.
    ///
    /// Parameters:
    ///   - clientToken: Specifies a unique, case-sensitive ID that you provide to ensure the idempotency of the request. This lets you safely retry the request without accidentally performing the same operation a second time. Passing the same value to a later call to an operation requires that you also pass the same value for all other parameters. We recommend that you use a UUID type of value.. If you don't provide this value, then Amazon Web Services generates a random one for you. If you retry the operation with the same ClientToken, but with different parameters, the retry fails with an IdempotentParameterMismatch error.
    ///   - instanceArn: Specifies the ARN of the instance of IAM Identity Center to contain the new trusted token issuer configuration.
    ///   - name: Specifies the name of the new trusted token issuer configuration.
    ///   - tags: Specifies tags to be attached to the new trusted token issuer configuration.
    ///   - trustedTokenIssuerConfiguration: Specifies settings that apply to the new trusted token issuer configuration. The settings that are available depend on what TrustedTokenIssuerType you specify.
    ///   - trustedTokenIssuerType: Specifies the type of the new trusted token issuer.
    ///   - logger: Logger use during operation
    @inlinable
    public func createTrustedTokenIssuer(
        clientToken: String? = CreateTrustedTokenIssuerRequest.idempotencyToken(),
        instanceArn: String,
        name: String,
        tags: [Tag]? = nil,
        trustedTokenIssuerConfiguration: TrustedTokenIssuerConfiguration,
        trustedTokenIssuerType: TrustedTokenIssuerType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateTrustedTokenIssuerResponse {
        let input = CreateTrustedTokenIssuerRequest(
            clientToken: clientToken, 
            instanceArn: instanceArn, 
            name: name, 
            tags: tags, 
            trustedTokenIssuerConfiguration: trustedTokenIssuerConfiguration, 
            trustedTokenIssuerType: trustedTokenIssuerType
        )
        return try await self.createTrustedTokenIssuer(input, logger: logger)
    }

    /// Deletes a principal's access from a specified Amazon Web Services account using a specified permission set.  After a successful response, call DescribeAccountAssignmentDeletionStatus to describe the status of an assignment deletion request.
    @Sendable
    @inlinable
    public func deleteAccountAssignment(_ input: DeleteAccountAssignmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAccountAssignmentResponse {
        try await self.client.execute(
            operation: "DeleteAccountAssignment", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a principal's access from a specified Amazon Web Services account using a specified permission set.  After a successful response, call DescribeAccountAssignmentDeletionStatus to describe the status of an assignment deletion request.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - permissionSetArn: The ARN of the permission set that will be used to remove access.
    ///   - principalId: An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the IAM Identity Center Identity Store API Reference.
    ///   - principalType: The entity type for which the assignment will be deleted.
    ///   - targetId: TargetID is an Amazon Web Services account identifier, (For example, 123456789012).
    ///   - targetType: The entity type for which the assignment will be deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAccountAssignment(
        instanceArn: String,
        permissionSetArn: String,
        principalId: String,
        principalType: PrincipalType,
        targetId: String,
        targetType: TargetType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAccountAssignmentResponse {
        let input = DeleteAccountAssignmentRequest(
            instanceArn: instanceArn, 
            permissionSetArn: permissionSetArn, 
            principalId: principalId, 
            principalType: principalType, 
            targetId: targetId, 
            targetType: targetType
        )
        return try await self.deleteAccountAssignment(input, logger: logger)
    }

    /// Deletes the association with the application. The connected service resource still exists.
    @Sendable
    @inlinable
    public func deleteApplication(_ input: DeleteApplicationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteApplicationResponse {
        try await self.client.execute(
            operation: "DeleteApplication", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the association with the application. The connected service resource still exists.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteApplication(
        applicationArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteApplicationResponse {
        let input = DeleteApplicationRequest(
            applicationArn: applicationArn
        )
        return try await self.deleteApplication(input, logger: logger)
    }

    /// Deletes an IAM Identity Center access scope from an application.
    @Sendable
    @inlinable
    public func deleteApplicationAccessScope(_ input: DeleteApplicationAccessScopeRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteApplicationAccessScope", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an IAM Identity Center access scope from an application.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application with the access scope to delete.
    ///   - scope: Specifies the name of the access scope to remove from the application.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteApplicationAccessScope(
        applicationArn: String,
        scope: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteApplicationAccessScopeRequest(
            applicationArn: applicationArn, 
            scope: scope
        )
        return try await self.deleteApplicationAccessScope(input, logger: logger)
    }

    /// Revoke application access to an application by deleting application assignments for a user or group.
    @Sendable
    @inlinable
    public func deleteApplicationAssignment(_ input: DeleteApplicationAssignmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteApplicationAssignmentResponse {
        try await self.client.execute(
            operation: "DeleteApplicationAssignment", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Revoke application access to an application by deleting application assignments for a user or group.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application.
    ///   - principalId: An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the IAM Identity Center Identity Store API Reference.
    ///   - principalType: The entity type for which the assignment will be deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteApplicationAssignment(
        applicationArn: String,
        principalId: String,
        principalType: PrincipalType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteApplicationAssignmentResponse {
        let input = DeleteApplicationAssignmentRequest(
            applicationArn: applicationArn, 
            principalId: principalId, 
            principalType: principalType
        )
        return try await self.deleteApplicationAssignment(input, logger: logger)
    }

    /// Deletes an authentication method from an application.
    @Sendable
    @inlinable
    public func deleteApplicationAuthenticationMethod(_ input: DeleteApplicationAuthenticationMethodRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteApplicationAuthenticationMethod", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an authentication method from an application.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application with the authentication method to delete.
    ///   - authenticationMethodType: Specifies the authentication method type to delete from the application.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteApplicationAuthenticationMethod(
        applicationArn: String,
        authenticationMethodType: AuthenticationMethodType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteApplicationAuthenticationMethodRequest(
            applicationArn: applicationArn, 
            authenticationMethodType: authenticationMethodType
        )
        return try await self.deleteApplicationAuthenticationMethod(input, logger: logger)
    }

    /// Deletes a grant from an application.
    @Sendable
    @inlinable
    public func deleteApplicationGrant(_ input: DeleteApplicationGrantRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "DeleteApplicationGrant", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a grant from an application.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application with the grant to delete.
    ///   - grantType: Specifies the type of grant to delete from the application.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteApplicationGrant(
        applicationArn: String,
        grantType: GrantType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = DeleteApplicationGrantRequest(
            applicationArn: applicationArn, 
            grantType: grantType
        )
        return try await self.deleteApplicationGrant(input, logger: logger)
    }

    /// Deletes the inline policy from a specified permission set.
    @Sendable
    @inlinable
    public func deleteInlinePolicyFromPermissionSet(_ input: DeleteInlinePolicyFromPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteInlinePolicyFromPermissionSetResponse {
        try await self.client.execute(
            operation: "DeleteInlinePolicyFromPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the inline policy from a specified permission set.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - permissionSetArn: The ARN of the permission set that will be used to remove access.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteInlinePolicyFromPermissionSet(
        instanceArn: String,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteInlinePolicyFromPermissionSetResponse {
        let input = DeleteInlinePolicyFromPermissionSetRequest(
            instanceArn: instanceArn, 
            permissionSetArn: permissionSetArn
        )
        return try await self.deleteInlinePolicyFromPermissionSet(input, logger: logger)
    }

    /// Deletes the instance of IAM Identity Center. Only the account that owns the instance can call this API. Neither the delegated administrator nor member account can delete the organization instance, but those roles can delete their own instance.
    @Sendable
    @inlinable
    public func deleteInstance(_ input: DeleteInstanceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteInstanceResponse {
        try await self.client.execute(
            operation: "DeleteInstance", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the instance of IAM Identity Center. Only the account that owns the instance can call this API. Neither the delegated administrator nor member account can delete the organization instance, but those roles can delete their own instance.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the instance of IAM Identity Center under which the operation will run.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteInstance(
        instanceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteInstanceResponse {
        let input = DeleteInstanceRequest(
            instanceArn: instanceArn
        )
        return try await self.deleteInstance(input, logger: logger)
    }

    /// Disables the attributes-based access control (ABAC) feature for the specified IAM Identity Center instance and deletes all of the attribute mappings that have been configured. Once deleted, any attributes that are received from an identity source and any custom attributes you have previously configured will not be passed. For more information about ABAC, see Attribute-Based Access Control in the IAM Identity Center User Guide.
    @Sendable
    @inlinable
    public func deleteInstanceAccessControlAttributeConfiguration(_ input: DeleteInstanceAccessControlAttributeConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteInstanceAccessControlAttributeConfigurationResponse {
        try await self.client.execute(
            operation: "DeleteInstanceAccessControlAttributeConfiguration", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disables the attributes-based access control (ABAC) feature for the specified IAM Identity Center instance and deletes all of the attribute mappings that have been configured. Once deleted, any attributes that are received from an identity source and any custom attributes you have previously configured will not be passed. For more information about ABAC, see Attribute-Based Access Control in the IAM Identity Center User Guide.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteInstanceAccessControlAttributeConfiguration(
        instanceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteInstanceAccessControlAttributeConfigurationResponse {
        let input = DeleteInstanceAccessControlAttributeConfigurationRequest(
            instanceArn: instanceArn
        )
        return try await self.deleteInstanceAccessControlAttributeConfiguration(input, logger: logger)
    }

    /// Deletes the specified permission set.
    @Sendable
    @inlinable
    public func deletePermissionSet(_ input: DeletePermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeletePermissionSetResponse {
        try await self.client.execute(
            operation: "DeletePermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified permission set.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - permissionSetArn: The ARN of the permission set that should be deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deletePermissionSet(
        instanceArn: String,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeletePermissionSetResponse {
        let input = DeletePermissionSetRequest(
            instanceArn: instanceArn, 
            permissionSetArn: permissionSetArn
        )
        return try await self.deletePermissionSet(input, logger: logger)
    }

    /// Deletes the permissions boundary from a specified PermissionSet.
    @Sendable
    @inlinable
    public func deletePermissionsBoundaryFromPermissionSet(_ input: DeletePermissionsBoundaryFromPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeletePermissionsBoundaryFromPermissionSetResponse {
        try await self.client.execute(
            operation: "DeletePermissionsBoundaryFromPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the permissions boundary from a specified PermissionSet.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed.
    ///   - permissionSetArn: The ARN of the PermissionSet.
    ///   - logger: Logger use during operation
    @inlinable
    public func deletePermissionsBoundaryFromPermissionSet(
        instanceArn: String,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeletePermissionsBoundaryFromPermissionSetResponse {
        let input = DeletePermissionsBoundaryFromPermissionSetRequest(
            instanceArn: instanceArn, 
            permissionSetArn: permissionSetArn
        )
        return try await self.deletePermissionsBoundaryFromPermissionSet(input, logger: logger)
    }

    /// Deletes a trusted token issuer configuration from an instance of IAM Identity Center.  Deleting this trusted token issuer configuration will cause users to lose access to any applications that are configured to use the trusted token issuer.
    @Sendable
    @inlinable
    public func deleteTrustedTokenIssuer(_ input: DeleteTrustedTokenIssuerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteTrustedTokenIssuerResponse {
        try await self.client.execute(
            operation: "DeleteTrustedTokenIssuer", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a trusted token issuer configuration from an instance of IAM Identity Center.  Deleting this trusted token issuer configuration will cause users to lose access to any applications that are configured to use the trusted token issuer.
    ///
    /// Parameters:
    ///   - trustedTokenIssuerArn: Specifies the ARN of the trusted token issuer configuration to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteTrustedTokenIssuer(
        trustedTokenIssuerArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteTrustedTokenIssuerResponse {
        let input = DeleteTrustedTokenIssuerRequest(
            trustedTokenIssuerArn: trustedTokenIssuerArn
        )
        return try await self.deleteTrustedTokenIssuer(input, logger: logger)
    }

    /// Describes the status of the assignment creation request.
    @Sendable
    @inlinable
    public func describeAccountAssignmentCreationStatus(_ input: DescribeAccountAssignmentCreationStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAccountAssignmentCreationStatusResponse {
        try await self.client.execute(
            operation: "DescribeAccountAssignmentCreationStatus", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the status of the assignment creation request.
    ///
    /// Parameters:
    ///   - accountAssignmentCreationRequestId: The identifier that is used to track the request operation progress.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAccountAssignmentCreationStatus(
        accountAssignmentCreationRequestId: String,
        instanceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAccountAssignmentCreationStatusResponse {
        let input = DescribeAccountAssignmentCreationStatusRequest(
            accountAssignmentCreationRequestId: accountAssignmentCreationRequestId, 
            instanceArn: instanceArn
        )
        return try await self.describeAccountAssignmentCreationStatus(input, logger: logger)
    }

    /// Describes the status of the assignment deletion request.
    @Sendable
    @inlinable
    public func describeAccountAssignmentDeletionStatus(_ input: DescribeAccountAssignmentDeletionStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeAccountAssignmentDeletionStatusResponse {
        try await self.client.execute(
            operation: "DescribeAccountAssignmentDeletionStatus", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the status of the assignment deletion request.
    ///
    /// Parameters:
    ///   - accountAssignmentDeletionRequestId: The identifier that is used to track the request operation progress.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeAccountAssignmentDeletionStatus(
        accountAssignmentDeletionRequestId: String,
        instanceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeAccountAssignmentDeletionStatusResponse {
        let input = DescribeAccountAssignmentDeletionStatusRequest(
            accountAssignmentDeletionRequestId: accountAssignmentDeletionRequestId, 
            instanceArn: instanceArn
        )
        return try await self.describeAccountAssignmentDeletionStatus(input, logger: logger)
    }

    /// Retrieves the details of an application associated with an instance of IAM Identity Center.
    @Sendable
    @inlinable
    public func describeApplication(_ input: DescribeApplicationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeApplicationResponse {
        try await self.client.execute(
            operation: "DescribeApplication", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the details of an application associated with an instance of IAM Identity Center.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeApplication(
        applicationArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeApplicationResponse {
        let input = DescribeApplicationRequest(
            applicationArn: applicationArn
        )
        return try await self.describeApplication(input, logger: logger)
    }

    /// Retrieves a direct assignment of a user or group to an application. If the user doesn’t have a direct assignment to the application, the user may still have access to the application through a group. Therefore, don’t use this API to test access to an application for a user. Instead use ListApplicationAssignmentsForPrincipal.
    @Sendable
    @inlinable
    public func describeApplicationAssignment(_ input: DescribeApplicationAssignmentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeApplicationAssignmentResponse {
        try await self.client.execute(
            operation: "DescribeApplicationAssignment", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a direct assignment of a user or group to an application. If the user doesn’t have a direct assignment to the application, the user may still have access to the application through a group. Therefore, don’t use this API to test access to an application for a user. Instead use ListApplicationAssignmentsForPrincipal.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - principalId: An identifier for an object in IAM Identity Center, such as a user or group. PrincipalIds are GUIDs (For example, f81d4fae-7dec-11d0-a765-00a0c91e6bf6). For more information about PrincipalIds in IAM Identity Center, see the IAM Identity Center Identity Store API Reference.
    ///   - principalType: The entity type for which the assignment will be created.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeApplicationAssignment(
        applicationArn: String,
        principalId: String,
        principalType: PrincipalType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeApplicationAssignmentResponse {
        let input = DescribeApplicationAssignmentRequest(
            applicationArn: applicationArn, 
            principalId: principalId, 
            principalType: principalType
        )
        return try await self.describeApplicationAssignment(input, logger: logger)
    }

    /// Retrieves details about a provider that can be used to connect an Amazon Web Services managed application or customer managed application to IAM Identity Center.
    @Sendable
    @inlinable
    public func describeApplicationProvider(_ input: DescribeApplicationProviderRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeApplicationProviderResponse {
        try await self.client.execute(
            operation: "DescribeApplicationProvider", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves details about a provider that can be used to connect an Amazon Web Services managed application or customer managed application to IAM Identity Center.
    ///
    /// Parameters:
    ///   - applicationProviderArn: Specifies the ARN of the application provider for which you want details.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeApplicationProvider(
        applicationProviderArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeApplicationProviderResponse {
        let input = DescribeApplicationProviderRequest(
            applicationProviderArn: applicationProviderArn
        )
        return try await self.describeApplicationProvider(input, logger: logger)
    }

    /// Returns the details of an instance of IAM Identity Center. The status can be one of the following:    CREATE_IN_PROGRESS - The instance is in the process of being created. When the instance is ready for use, DescribeInstance returns the status of ACTIVE. While the instance is in the CREATE_IN_PROGRESS state, you can call only DescribeInstance and DeleteInstance operations.    DELETE_IN_PROGRESS - The instance is being deleted. Returns AccessDeniedException after the delete operation completes.     ACTIVE - The instance is active.
    @Sendable
    @inlinable
    public func describeInstance(_ input: DescribeInstanceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeInstanceResponse {
        try await self.client.execute(
            operation: "DescribeInstance", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the details of an instance of IAM Identity Center. The status can be one of the following:    CREATE_IN_PROGRESS - The instance is in the process of being created. When the instance is ready for use, DescribeInstance returns the status of ACTIVE. While the instance is in the CREATE_IN_PROGRESS state, you can call only DescribeInstance and DeleteInstance operations.    DELETE_IN_PROGRESS - The instance is being deleted. Returns AccessDeniedException after the delete operation completes.     ACTIVE - The instance is active.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the instance of IAM Identity Center under which the operation will run.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeInstance(
        instanceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeInstanceResponse {
        let input = DescribeInstanceRequest(
            instanceArn: instanceArn
        )
        return try await self.describeInstance(input, logger: logger)
    }

    /// Returns the list of IAM Identity Center identity store attributes that have been configured to work with attributes-based access control (ABAC) for the specified IAM Identity Center instance. This will not return attributes configured and sent by an external identity provider. For more information about ABAC, see Attribute-Based Access Control in the IAM Identity Center User Guide.
    @Sendable
    @inlinable
    public func describeInstanceAccessControlAttributeConfiguration(_ input: DescribeInstanceAccessControlAttributeConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeInstanceAccessControlAttributeConfigurationResponse {
        try await self.client.execute(
            operation: "DescribeInstanceAccessControlAttributeConfiguration", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the list of IAM Identity Center identity store attributes that have been configured to work with attributes-based access control (ABAC) for the specified IAM Identity Center instance. This will not return attributes configured and sent by an external identity provider. For more information about ABAC, see Attribute-Based Access Control in the IAM Identity Center User Guide.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeInstanceAccessControlAttributeConfiguration(
        instanceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeInstanceAccessControlAttributeConfigurationResponse {
        let input = DescribeInstanceAccessControlAttributeConfigurationRequest(
            instanceArn: instanceArn
        )
        return try await self.describeInstanceAccessControlAttributeConfiguration(input, logger: logger)
    }

    /// Gets the details of the permission set.
    @Sendable
    @inlinable
    public func describePermissionSet(_ input: DescribePermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribePermissionSetResponse {
        try await self.client.execute(
            operation: "DescribePermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the details of the permission set.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - permissionSetArn: The ARN of the permission set.
    ///   - logger: Logger use during operation
    @inlinable
    public func describePermissionSet(
        instanceArn: String,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribePermissionSetResponse {
        let input = DescribePermissionSetRequest(
            instanceArn: instanceArn, 
            permissionSetArn: permissionSetArn
        )
        return try await self.describePermissionSet(input, logger: logger)
    }

    /// Describes the status for the given permission set provisioning request.
    @Sendable
    @inlinable
    public func describePermissionSetProvisioningStatus(_ input: DescribePermissionSetProvisioningStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribePermissionSetProvisioningStatusResponse {
        try await self.client.execute(
            operation: "DescribePermissionSetProvisioningStatus", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Describes the status for the given permission set provisioning request.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - provisionPermissionSetRequestId: The identifier that is provided by the ProvisionPermissionSet call to retrieve the current status of the provisioning workflow.
    ///   - logger: Logger use during operation
    @inlinable
    public func describePermissionSetProvisioningStatus(
        instanceArn: String,
        provisionPermissionSetRequestId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribePermissionSetProvisioningStatusResponse {
        let input = DescribePermissionSetProvisioningStatusRequest(
            instanceArn: instanceArn, 
            provisionPermissionSetRequestId: provisionPermissionSetRequestId
        )
        return try await self.describePermissionSetProvisioningStatus(input, logger: logger)
    }

    /// Retrieves details about a trusted token issuer configuration stored in an instance of IAM Identity Center. Details include the name of the trusted token issuer, the issuer URL, and the path of the source attribute and the destination attribute for a trusted token issuer configuration.
    @Sendable
    @inlinable
    public func describeTrustedTokenIssuer(_ input: DescribeTrustedTokenIssuerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeTrustedTokenIssuerResponse {
        try await self.client.execute(
            operation: "DescribeTrustedTokenIssuer", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves details about a trusted token issuer configuration stored in an instance of IAM Identity Center. Details include the name of the trusted token issuer, the issuer URL, and the path of the source attribute and the destination attribute for a trusted token issuer configuration.
    ///
    /// Parameters:
    ///   - trustedTokenIssuerArn: Specifies the ARN of the trusted token issuer configuration that you want details about.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeTrustedTokenIssuer(
        trustedTokenIssuerArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeTrustedTokenIssuerResponse {
        let input = DescribeTrustedTokenIssuerRequest(
            trustedTokenIssuerArn: trustedTokenIssuerArn
        )
        return try await self.describeTrustedTokenIssuer(input, logger: logger)
    }

    /// Detaches the specified customer managed policy from the specified PermissionSet.
    @Sendable
    @inlinable
    public func detachCustomerManagedPolicyReferenceFromPermissionSet(_ input: DetachCustomerManagedPolicyReferenceFromPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetachCustomerManagedPolicyReferenceFromPermissionSetResponse {
        try await self.client.execute(
            operation: "DetachCustomerManagedPolicyReferenceFromPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detaches the specified customer managed policy from the specified PermissionSet.
    ///
    /// Parameters:
    ///   - customerManagedPolicyReference: Specifies the name and path of a customer managed policy. You must have an IAM policy that matches the name and path in each Amazon Web Services account where you want to deploy your permission set.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed.
    ///   - permissionSetArn: The ARN of the PermissionSet.
    ///   - logger: Logger use during operation
    @inlinable
    public func detachCustomerManagedPolicyReferenceFromPermissionSet(
        customerManagedPolicyReference: CustomerManagedPolicyReference,
        instanceArn: String,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetachCustomerManagedPolicyReferenceFromPermissionSetResponse {
        let input = DetachCustomerManagedPolicyReferenceFromPermissionSetRequest(
            customerManagedPolicyReference: customerManagedPolicyReference, 
            instanceArn: instanceArn, 
            permissionSetArn: permissionSetArn
        )
        return try await self.detachCustomerManagedPolicyReferenceFromPermissionSet(input, logger: logger)
    }

    /// Detaches the attached Amazon Web Services managed policy ARN from the specified permission set.
    @Sendable
    @inlinable
    public func detachManagedPolicyFromPermissionSet(_ input: DetachManagedPolicyFromPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetachManagedPolicyFromPermissionSetResponse {
        try await self.client.execute(
            operation: "DetachManagedPolicyFromPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detaches the attached Amazon Web Services managed policy ARN from the specified permission set.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - managedPolicyArn: The Amazon Web Services managed policy ARN to be detached from a permission set.
    ///   - permissionSetArn: The ARN of the PermissionSet from which the policy should be detached.
    ///   - logger: Logger use during operation
    @inlinable
    public func detachManagedPolicyFromPermissionSet(
        instanceArn: String,
        managedPolicyArn: String,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetachManagedPolicyFromPermissionSetResponse {
        let input = DetachManagedPolicyFromPermissionSetRequest(
            instanceArn: instanceArn, 
            managedPolicyArn: managedPolicyArn, 
            permissionSetArn: permissionSetArn
        )
        return try await self.detachManagedPolicyFromPermissionSet(input, logger: logger)
    }

    /// Retrieves the authorized targets for an IAM Identity Center access scope for an application.
    @Sendable
    @inlinable
    public func getApplicationAccessScope(_ input: GetApplicationAccessScopeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetApplicationAccessScopeResponse {
        try await self.client.execute(
            operation: "GetApplicationAccessScope", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the authorized targets for an IAM Identity Center access scope for an application.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application with the access scope that you want to retrieve.
    ///   - scope: Specifies the name of the access scope for which you want the authorized targets.
    ///   - logger: Logger use during operation
    @inlinable
    public func getApplicationAccessScope(
        applicationArn: String,
        scope: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetApplicationAccessScopeResponse {
        let input = GetApplicationAccessScopeRequest(
            applicationArn: applicationArn, 
            scope: scope
        )
        return try await self.getApplicationAccessScope(input, logger: logger)
    }

    /// Retrieves the configuration of PutApplicationAssignmentConfiguration.
    @Sendable
    @inlinable
    public func getApplicationAssignmentConfiguration(_ input: GetApplicationAssignmentConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetApplicationAssignmentConfigurationResponse {
        try await self.client.execute(
            operation: "GetApplicationAssignmentConfiguration", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the configuration of PutApplicationAssignmentConfiguration.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - logger: Logger use during operation
    @inlinable
    public func getApplicationAssignmentConfiguration(
        applicationArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetApplicationAssignmentConfigurationResponse {
        let input = GetApplicationAssignmentConfigurationRequest(
            applicationArn: applicationArn
        )
        return try await self.getApplicationAssignmentConfiguration(input, logger: logger)
    }

    /// Retrieves details about an authentication method used by an application.
    @Sendable
    @inlinable
    public func getApplicationAuthenticationMethod(_ input: GetApplicationAuthenticationMethodRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetApplicationAuthenticationMethodResponse {
        try await self.client.execute(
            operation: "GetApplicationAuthenticationMethod", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves details about an authentication method used by an application.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application.
    ///   - authenticationMethodType: Specifies the type of authentication method for which you want details.
    ///   - logger: Logger use during operation
    @inlinable
    public func getApplicationAuthenticationMethod(
        applicationArn: String,
        authenticationMethodType: AuthenticationMethodType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetApplicationAuthenticationMethodResponse {
        let input = GetApplicationAuthenticationMethodRequest(
            applicationArn: applicationArn, 
            authenticationMethodType: authenticationMethodType
        )
        return try await self.getApplicationAuthenticationMethod(input, logger: logger)
    }

    /// Retrieves details about an application grant.
    @Sendable
    @inlinable
    public func getApplicationGrant(_ input: GetApplicationGrantRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetApplicationGrantResponse {
        try await self.client.execute(
            operation: "GetApplicationGrant", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves details about an application grant.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application that contains the grant.
    ///   - grantType: Specifies the type of grant.
    ///   - logger: Logger use during operation
    @inlinable
    public func getApplicationGrant(
        applicationArn: String,
        grantType: GrantType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetApplicationGrantResponse {
        let input = GetApplicationGrantRequest(
            applicationArn: applicationArn, 
            grantType: grantType
        )
        return try await self.getApplicationGrant(input, logger: logger)
    }

    /// Retrieves the session configuration for an application in IAM Identity Center. The session configuration determines how users can access an application. This includes whether user background sessions are enabled. User background sessions allow users to start a job on a supported Amazon Web Services managed application without having to remain signed in to an active session while the job runs.
    @Sendable
    @inlinable
    public func getApplicationSessionConfiguration(_ input: GetApplicationSessionConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetApplicationSessionConfigurationResponse {
        try await self.client.execute(
            operation: "GetApplicationSessionConfiguration", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves the session configuration for an application in IAM Identity Center. The session configuration determines how users can access an application. This includes whether user background sessions are enabled. User background sessions allow users to start a job on a supported Amazon Web Services managed application without having to remain signed in to an active session while the job runs.
    ///
    /// Parameters:
    ///   - applicationArn: The Amazon Resource Name (ARN) of the application for which to retrieve the session configuration.
    ///   - logger: Logger use during operation
    @inlinable
    public func getApplicationSessionConfiguration(
        applicationArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetApplicationSessionConfigurationResponse {
        let input = GetApplicationSessionConfigurationRequest(
            applicationArn: applicationArn
        )
        return try await self.getApplicationSessionConfiguration(input, logger: logger)
    }

    /// Obtains the inline policy assigned to the permission set.
    @Sendable
    @inlinable
    public func getInlinePolicyForPermissionSet(_ input: GetInlinePolicyForPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInlinePolicyForPermissionSetResponse {
        try await self.client.execute(
            operation: "GetInlinePolicyForPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Obtains the inline policy assigned to the permission set.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - permissionSetArn: The ARN of the permission set.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInlinePolicyForPermissionSet(
        instanceArn: String,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInlinePolicyForPermissionSetResponse {
        let input = GetInlinePolicyForPermissionSetRequest(
            instanceArn: instanceArn, 
            permissionSetArn: permissionSetArn
        )
        return try await self.getInlinePolicyForPermissionSet(input, logger: logger)
    }

    /// Obtains the permissions boundary for a specified PermissionSet.
    @Sendable
    @inlinable
    public func getPermissionsBoundaryForPermissionSet(_ input: GetPermissionsBoundaryForPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetPermissionsBoundaryForPermissionSetResponse {
        try await self.client.execute(
            operation: "GetPermissionsBoundaryForPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Obtains the permissions boundary for a specified PermissionSet.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed.
    ///   - permissionSetArn: The ARN of the PermissionSet.
    ///   - logger: Logger use during operation
    @inlinable
    public func getPermissionsBoundaryForPermissionSet(
        instanceArn: String,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetPermissionsBoundaryForPermissionSetResponse {
        let input = GetPermissionsBoundaryForPermissionSetRequest(
            instanceArn: instanceArn, 
            permissionSetArn: permissionSetArn
        )
        return try await self.getPermissionsBoundaryForPermissionSet(input, logger: logger)
    }

    /// Lists the status of the Amazon Web Services account assignment creation requests for a specified IAM Identity Center instance.
    @Sendable
    @inlinable
    public func listAccountAssignmentCreationStatus(_ input: ListAccountAssignmentCreationStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAccountAssignmentCreationStatusResponse {
        try await self.client.execute(
            operation: "ListAccountAssignmentCreationStatus", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the status of the Amazon Web Services account assignment creation requests for a specified IAM Identity Center instance.
    ///
    /// Parameters:
    ///   - filter: Filters results based on the passed attribute value.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the assignment.
    ///   - nextToken: The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAccountAssignmentCreationStatus(
        filter: OperationStatusFilter? = nil,
        instanceArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAccountAssignmentCreationStatusResponse {
        let input = ListAccountAssignmentCreationStatusRequest(
            filter: filter, 
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAccountAssignmentCreationStatus(input, logger: logger)
    }

    /// Lists the status of the Amazon Web Services account assignment deletion requests for a specified IAM Identity Center instance.
    @Sendable
    @inlinable
    public func listAccountAssignmentDeletionStatus(_ input: ListAccountAssignmentDeletionStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAccountAssignmentDeletionStatusResponse {
        try await self.client.execute(
            operation: "ListAccountAssignmentDeletionStatus", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the status of the Amazon Web Services account assignment deletion requests for a specified IAM Identity Center instance.
    ///
    /// Parameters:
    ///   - filter: Filters results based on the passed attribute value.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the assignment.
    ///   - nextToken: The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAccountAssignmentDeletionStatus(
        filter: OperationStatusFilter? = nil,
        instanceArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAccountAssignmentDeletionStatusResponse {
        let input = ListAccountAssignmentDeletionStatusRequest(
            filter: filter, 
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listAccountAssignmentDeletionStatus(input, logger: logger)
    }

    /// Lists the assignee of the specified Amazon Web Services account with the specified permission set.
    @Sendable
    @inlinable
    public func listAccountAssignments(_ input: ListAccountAssignmentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAccountAssignmentsResponse {
        try await self.client.execute(
            operation: "ListAccountAssignments", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the assignee of the specified Amazon Web Services account with the specified permission set.
    ///
    /// Parameters:
    ///   - accountId: The identifier of the Amazon Web Services account from which to list the assignments.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the assignment.
    ///   - nextToken: The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.
    ///   - permissionSetArn: The ARN of the permission set from which to list assignments.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAccountAssignments(
        accountId: String,
        instanceArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAccountAssignmentsResponse {
        let input = ListAccountAssignmentsRequest(
            accountId: accountId, 
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            permissionSetArn: permissionSetArn
        )
        return try await self.listAccountAssignments(input, logger: logger)
    }

    /// Retrieves a list of the IAM Identity Center associated Amazon Web Services accounts that the principal has access to. This action must be called from the management account containing your organization instance of IAM Identity Center. This action is not valid for account instances of IAM Identity Center.
    @Sendable
    @inlinable
    public func listAccountAssignmentsForPrincipal(_ input: ListAccountAssignmentsForPrincipalRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAccountAssignmentsForPrincipalResponse {
        try await self.client.execute(
            operation: "ListAccountAssignmentsForPrincipal", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves a list of the IAM Identity Center associated Amazon Web Services accounts that the principal has access to. This action must be called from the management account containing your organization instance of IAM Identity Center. This action is not valid for account instances of IAM Identity Center.
    ///
    /// Parameters:
    ///   - filter: Specifies an Amazon Web Services account ID number. Results are filtered to only those that match this ID number.
    ///   - instanceArn: Specifies the ARN of the instance of IAM Identity Center that contains the principal.
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: Specifies that you want to receive the next page of results. Valid only if you received a NextToken response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's NextToken response to request the next page of results.
    ///   - principalId: Specifies the principal for which you want to retrieve the list of account assignments.
    ///   - principalType: Specifies the type of the principal.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAccountAssignmentsForPrincipal(
        filter: ListAccountAssignmentsFilter? = nil,
        instanceArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        principalId: String,
        principalType: PrincipalType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAccountAssignmentsForPrincipalResponse {
        let input = ListAccountAssignmentsForPrincipalRequest(
            filter: filter, 
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            principalId: principalId, 
            principalType: principalType
        )
        return try await self.listAccountAssignmentsForPrincipal(input, logger: logger)
    }

    /// Lists all the Amazon Web Services accounts where the specified permission set is provisioned.
    @Sendable
    @inlinable
    public func listAccountsForProvisionedPermissionSet(_ input: ListAccountsForProvisionedPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListAccountsForProvisionedPermissionSetResponse {
        try await self.client.execute(
            operation: "ListAccountsForProvisionedPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all the Amazon Web Services accounts where the specified permission set is provisioned.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the PermissionSet.
    ///   - nextToken: The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.
    ///   - permissionSetArn: The ARN of the PermissionSet from which the associated Amazon Web Services accounts will be listed.
    ///   - provisioningStatus: The permission set provisioning status for an Amazon Web Services account.
    ///   - logger: Logger use during operation
    @inlinable
    public func listAccountsForProvisionedPermissionSet(
        instanceArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        permissionSetArn: String,
        provisioningStatus: ProvisioningStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListAccountsForProvisionedPermissionSetResponse {
        let input = ListAccountsForProvisionedPermissionSetRequest(
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            permissionSetArn: permissionSetArn, 
            provisioningStatus: provisioningStatus
        )
        return try await self.listAccountsForProvisionedPermissionSet(input, logger: logger)
    }

    /// Lists the access scopes and authorized targets associated with an application.
    @Sendable
    @inlinable
    public func listApplicationAccessScopes(_ input: ListApplicationAccessScopesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListApplicationAccessScopesResponse {
        try await self.client.execute(
            operation: "ListApplicationAccessScopes", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the access scopes and authorized targets associated with an application.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application.
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: Specifies that you want to receive the next page of results. Valid only if you received a NextToken response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's NextToken response to request the next page of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listApplicationAccessScopes(
        applicationArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListApplicationAccessScopesResponse {
        let input = ListApplicationAccessScopesRequest(
            applicationArn: applicationArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listApplicationAccessScopes(input, logger: logger)
    }

    /// Lists Amazon Web Services account users that are assigned to an application.
    @Sendable
    @inlinable
    public func listApplicationAssignments(_ input: ListApplicationAssignmentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListApplicationAssignmentsResponse {
        try await self.client.execute(
            operation: "ListApplicationAssignments", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists Amazon Web Services account users that are assigned to an application.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application.
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: Specifies that you want to receive the next page of results. Valid only if you received a NextToken response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's NextToken response to request the next page of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listApplicationAssignments(
        applicationArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListApplicationAssignmentsResponse {
        let input = ListApplicationAssignmentsRequest(
            applicationArn: applicationArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listApplicationAssignments(input, logger: logger)
    }

    /// Lists the applications to which a specified principal is assigned. You must provide a filter when calling this action from a member account against your organization instance of IAM Identity Center. A filter is not required when called from the management account against an organization instance of IAM Identity Center, or from a member account against an account instance of IAM Identity Center in the same account.
    @Sendable
    @inlinable
    public func listApplicationAssignmentsForPrincipal(_ input: ListApplicationAssignmentsForPrincipalRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListApplicationAssignmentsForPrincipalResponse {
        try await self.client.execute(
            operation: "ListApplicationAssignmentsForPrincipal", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the applications to which a specified principal is assigned. You must provide a filter when calling this action from a member account against your organization instance of IAM Identity Center. A filter is not required when called from the management account against an organization instance of IAM Identity Center, or from a member account against an account instance of IAM Identity Center in the same account.
    ///
    /// Parameters:
    ///   - filter: Filters the output to include only assignments associated with the application that has the specified ARN.
    ///   - instanceArn: Specifies the instance of IAM Identity Center that contains principal and applications.
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: Specifies that you want to receive the next page of results. Valid only if you received a NextToken response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's NextToken response to request the next page of results.
    ///   - principalId: Specifies the unique identifier of the principal for which you want to retrieve its assignments.
    ///   - principalType: Specifies the type of the principal for which you want to retrieve its assignments.
    ///   - logger: Logger use during operation
    @inlinable
    public func listApplicationAssignmentsForPrincipal(
        filter: ListApplicationAssignmentsFilter? = nil,
        instanceArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        principalId: String,
        principalType: PrincipalType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListApplicationAssignmentsForPrincipalResponse {
        let input = ListApplicationAssignmentsForPrincipalRequest(
            filter: filter, 
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            principalId: principalId, 
            principalType: principalType
        )
        return try await self.listApplicationAssignmentsForPrincipal(input, logger: logger)
    }

    /// Lists all of the authentication methods supported by the specified application.
    @Sendable
    @inlinable
    public func listApplicationAuthenticationMethods(_ input: ListApplicationAuthenticationMethodsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListApplicationAuthenticationMethodsResponse {
        try await self.client.execute(
            operation: "ListApplicationAuthenticationMethods", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all of the authentication methods supported by the specified application.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application with the authentication methods you want to list.
    ///   - nextToken: Specifies that you want to receive the next page of results. Valid only if you received a NextToken response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's NextToken response to request the next page of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listApplicationAuthenticationMethods(
        applicationArn: String,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListApplicationAuthenticationMethodsResponse {
        let input = ListApplicationAuthenticationMethodsRequest(
            applicationArn: applicationArn, 
            nextToken: nextToken
        )
        return try await self.listApplicationAuthenticationMethods(input, logger: logger)
    }

    /// List the grants associated with an application.
    @Sendable
    @inlinable
    public func listApplicationGrants(_ input: ListApplicationGrantsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListApplicationGrantsResponse {
        try await self.client.execute(
            operation: "ListApplicationGrants", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the grants associated with an application.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application whose grants you want to list.
    ///   - nextToken: Specifies that you want to receive the next page of results. Valid only if you received a NextToken response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's NextToken response to request the next page of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listApplicationGrants(
        applicationArn: String,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListApplicationGrantsResponse {
        let input = ListApplicationGrantsRequest(
            applicationArn: applicationArn, 
            nextToken: nextToken
        )
        return try await self.listApplicationGrants(input, logger: logger)
    }

    /// Lists the application providers configured in the IAM Identity Center identity store.
    @Sendable
    @inlinable
    public func listApplicationProviders(_ input: ListApplicationProvidersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListApplicationProvidersResponse {
        try await self.client.execute(
            operation: "ListApplicationProviders", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the application providers configured in the IAM Identity Center identity store.
    ///
    /// Parameters:
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: Specifies that you want to receive the next page of results. Valid only if you received a NextToken response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's NextToken response to request the next page of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listApplicationProviders(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListApplicationProvidersResponse {
        let input = ListApplicationProvidersRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listApplicationProviders(input, logger: logger)
    }

    /// Lists all applications associated with the instance of IAM Identity Center. When listing applications for an organization instance in the management account, member accounts must use the applicationAccount parameter to filter the list to only applications created from that account. When listing applications for an account instance in the same member account, a filter is not required.
    @Sendable
    @inlinable
    public func listApplications(_ input: ListApplicationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListApplicationsResponse {
        try await self.client.execute(
            operation: "ListApplications", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all applications associated with the instance of IAM Identity Center. When listing applications for an organization instance in the management account, member accounts must use the applicationAccount parameter to filter the list to only applications created from that account. When listing applications for an account instance in the same member account, a filter is not required.
    ///
    /// Parameters:
    ///   - filter: Filters response results.
    ///   - instanceArn: The ARN of the IAM Identity Center application under which the operation will run. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: Specifies that you want to receive the next page of results. Valid only if you received a NextToken response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's NextToken response to request the next page of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listApplications(
        filter: ListApplicationsFilter? = nil,
        instanceArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListApplicationsResponse {
        let input = ListApplicationsRequest(
            filter: filter, 
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listApplications(input, logger: logger)
    }

    /// Lists all customer managed policies attached to a specified PermissionSet.
    @Sendable
    @inlinable
    public func listCustomerManagedPolicyReferencesInPermissionSet(_ input: ListCustomerManagedPolicyReferencesInPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListCustomerManagedPolicyReferencesInPermissionSetResponse {
        try await self.client.execute(
            operation: "ListCustomerManagedPolicyReferencesInPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all customer managed policies attached to a specified PermissionSet.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed.
    ///   - maxResults: The maximum number of results to display for the list call.
    ///   - nextToken: The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.
    ///   - permissionSetArn: The ARN of the PermissionSet.
    ///   - logger: Logger use during operation
    @inlinable
    public func listCustomerManagedPolicyReferencesInPermissionSet(
        instanceArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListCustomerManagedPolicyReferencesInPermissionSetResponse {
        let input = ListCustomerManagedPolicyReferencesInPermissionSetRequest(
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            permissionSetArn: permissionSetArn
        )
        return try await self.listCustomerManagedPolicyReferencesInPermissionSet(input, logger: logger)
    }

    /// Lists the details of the organization and account instances of IAM Identity Center that were created in or visible to the account calling this API.
    @Sendable
    @inlinable
    public func listInstances(_ input: ListInstancesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListInstancesResponse {
        try await self.client.execute(
            operation: "ListInstances", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the details of the organization and account instances of IAM Identity Center that were created in or visible to the account calling this API.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to display for the instance.
    ///   - nextToken: The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.
    ///   - logger: Logger use during operation
    @inlinable
    public func listInstances(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListInstancesResponse {
        let input = ListInstancesRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listInstances(input, logger: logger)
    }

    /// Lists the Amazon Web Services managed policy that is attached to a specified permission set.
    @Sendable
    @inlinable
    public func listManagedPoliciesInPermissionSet(_ input: ListManagedPoliciesInPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListManagedPoliciesInPermissionSetResponse {
        try await self.client.execute(
            operation: "ListManagedPoliciesInPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the Amazon Web Services managed policy that is attached to a specified permission set.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the PermissionSet.
    ///   - nextToken: The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.
    ///   - permissionSetArn: The ARN of the PermissionSet whose managed policies will be listed.
    ///   - logger: Logger use during operation
    @inlinable
    public func listManagedPoliciesInPermissionSet(
        instanceArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListManagedPoliciesInPermissionSetResponse {
        let input = ListManagedPoliciesInPermissionSetRequest(
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            permissionSetArn: permissionSetArn
        )
        return try await self.listManagedPoliciesInPermissionSet(input, logger: logger)
    }

    /// Lists the status of the permission set provisioning requests for a specified IAM Identity Center instance.
    @Sendable
    @inlinable
    public func listPermissionSetProvisioningStatus(_ input: ListPermissionSetProvisioningStatusRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListPermissionSetProvisioningStatusResponse {
        try await self.client.execute(
            operation: "ListPermissionSetProvisioningStatus", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the status of the permission set provisioning requests for a specified IAM Identity Center instance.
    ///
    /// Parameters:
    ///   - filter: Filters results based on the passed attribute value.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the assignment.
    ///   - nextToken: The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.
    ///   - logger: Logger use during operation
    @inlinable
    public func listPermissionSetProvisioningStatus(
        filter: OperationStatusFilter? = nil,
        instanceArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListPermissionSetProvisioningStatusResponse {
        let input = ListPermissionSetProvisioningStatusRequest(
            filter: filter, 
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listPermissionSetProvisioningStatus(input, logger: logger)
    }

    /// Lists the PermissionSets in an IAM Identity Center instance.
    @Sendable
    @inlinable
    public func listPermissionSets(_ input: ListPermissionSetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListPermissionSetsResponse {
        try await self.client.execute(
            operation: "ListPermissionSets", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the PermissionSets in an IAM Identity Center instance.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the assignment.
    ///   - nextToken: The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.
    ///   - logger: Logger use during operation
    @inlinable
    public func listPermissionSets(
        instanceArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListPermissionSetsResponse {
        let input = ListPermissionSetsRequest(
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listPermissionSets(input, logger: logger)
    }

    /// Lists all the permission sets that are provisioned to a specified Amazon Web Services account.
    @Sendable
    @inlinable
    public func listPermissionSetsProvisionedToAccount(_ input: ListPermissionSetsProvisionedToAccountRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListPermissionSetsProvisionedToAccountResponse {
        try await self.client.execute(
            operation: "ListPermissionSetsProvisionedToAccount", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all the permission sets that are provisioned to a specified Amazon Web Services account.
    ///
    /// Parameters:
    ///   - accountId: The identifier of the Amazon Web Services account from which to list the assignments.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the assignment.
    ///   - nextToken: The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.
    ///   - provisioningStatus: The status object for the permission set provisioning operation.
    ///   - logger: Logger use during operation
    @inlinable
    public func listPermissionSetsProvisionedToAccount(
        accountId: String,
        instanceArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        provisioningStatus: ProvisioningStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListPermissionSetsProvisionedToAccountResponse {
        let input = ListPermissionSetsProvisionedToAccountRequest(
            accountId: accountId, 
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            nextToken: nextToken, 
            provisioningStatus: provisioningStatus
        )
        return try await self.listPermissionSetsProvisionedToAccount(input, logger: logger)
    }

    /// Lists the tags that are attached to a specified resource.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists the tags that are attached to a specified resource.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - nextToken: The pagination token for the list API. Initially the value is null. Use the output of previous API calls to make subsequent calls.
    ///   - resourceArn: The ARN of the resource with the tags to be listed.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        instanceArn: String? = nil,
        nextToken: String? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            instanceArn: instanceArn, 
            nextToken: nextToken, 
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Lists all the trusted token issuers configured in an instance of IAM Identity Center.
    @Sendable
    @inlinable
    public func listTrustedTokenIssuers(_ input: ListTrustedTokenIssuersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTrustedTokenIssuersResponse {
        try await self.client.execute(
            operation: "ListTrustedTokenIssuers", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all the trusted token issuers configured in an instance of IAM Identity Center.
    ///
    /// Parameters:
    ///   - instanceArn: Specifies the ARN of the instance of IAM Identity Center with the trusted token issuer configurations that you want to list.
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - nextToken: Specifies that you want to receive the next page of results. Valid only if you received a NextToken response in the previous request. If you did, it indicates that more output is available. Set this parameter to the value provided by the previous call's NextToken response to request the next page of results.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTrustedTokenIssuers(
        instanceArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTrustedTokenIssuersResponse {
        let input = ListTrustedTokenIssuersRequest(
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listTrustedTokenIssuers(input, logger: logger)
    }

    /// The process by which a specified permission set is provisioned to the specified target.
    @Sendable
    @inlinable
    public func provisionPermissionSet(_ input: ProvisionPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ProvisionPermissionSetResponse {
        try await self.client.execute(
            operation: "ProvisionPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// The process by which a specified permission set is provisioned to the specified target.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - permissionSetArn: The ARN of the permission set.
    ///   - targetId: TargetID is an Amazon Web Services account identifier, (For example, 123456789012).
    ///   - targetType: The entity type for which the assignment will be created.
    ///   - logger: Logger use during operation
    @inlinable
    public func provisionPermissionSet(
        instanceArn: String,
        permissionSetArn: String,
        targetId: String? = nil,
        targetType: ProvisionTargetType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ProvisionPermissionSetResponse {
        let input = ProvisionPermissionSetRequest(
            instanceArn: instanceArn, 
            permissionSetArn: permissionSetArn, 
            targetId: targetId, 
            targetType: targetType
        )
        return try await self.provisionPermissionSet(input, logger: logger)
    }

    /// Adds or updates the list of authorized targets for an IAM Identity Center access scope for an application.
    @Sendable
    @inlinable
    public func putApplicationAccessScope(_ input: PutApplicationAccessScopeRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "PutApplicationAccessScope", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds or updates the list of authorized targets for an IAM Identity Center access scope for an application.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application with the access scope with the targets to add or update.
    ///   - authorizedTargets: Specifies an array list of ARNs that represent the authorized targets for this access scope.
    ///   - scope: Specifies the name of the access scope to be associated with the specified targets.
    ///   - logger: Logger use during operation
    @inlinable
    public func putApplicationAccessScope(
        applicationArn: String,
        authorizedTargets: [String]? = nil,
        scope: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = PutApplicationAccessScopeRequest(
            applicationArn: applicationArn, 
            authorizedTargets: authorizedTargets, 
            scope: scope
        )
        return try await self.putApplicationAccessScope(input, logger: logger)
    }

    /// Configure how users gain access to an application. If AssignmentsRequired is true (default value), users don’t have access to the application unless an assignment is created using the CreateApplicationAssignment API. If false, all users have access to the application. If an assignment is created using CreateApplicationAssignment., the user retains access if AssignmentsRequired is set to true.
    @Sendable
    @inlinable
    public func putApplicationAssignmentConfiguration(_ input: PutApplicationAssignmentConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutApplicationAssignmentConfigurationResponse {
        try await self.client.execute(
            operation: "PutApplicationAssignmentConfiguration", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Configure how users gain access to an application. If AssignmentsRequired is true (default value), users don’t have access to the application unless an assignment is created using the CreateApplicationAssignment API. If false, all users have access to the application. If an assignment is created using CreateApplicationAssignment., the user retains access if AssignmentsRequired is set to true.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - assignmentRequired: If AssignmentsRequired is true (default value), users don’t have access to the application unless an assignment is created using the CreateApplicationAssignment API. If false, all users have access to the application.
    ///   - logger: Logger use during operation
    @inlinable
    public func putApplicationAssignmentConfiguration(
        applicationArn: String,
        assignmentRequired: Bool = true,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutApplicationAssignmentConfigurationResponse {
        let input = PutApplicationAssignmentConfigurationRequest(
            applicationArn: applicationArn, 
            assignmentRequired: assignmentRequired
        )
        return try await self.putApplicationAssignmentConfiguration(input, logger: logger)
    }

    /// Adds or updates an authentication method for an application.
    @Sendable
    @inlinable
    public func putApplicationAuthenticationMethod(_ input: PutApplicationAuthenticationMethodRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "PutApplicationAuthenticationMethod", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds or updates an authentication method for an application.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application with the authentication method to add or update.
    ///   - authenticationMethod: Specifies a structure that describes the authentication method to add or update. The structure type you provide is determined by the AuthenticationMethodType parameter.
    ///   - authenticationMethodType: Specifies the type of the authentication method that you want to add or update.
    ///   - logger: Logger use during operation
    @inlinable
    public func putApplicationAuthenticationMethod(
        applicationArn: String,
        authenticationMethod: AuthenticationMethod,
        authenticationMethodType: AuthenticationMethodType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = PutApplicationAuthenticationMethodRequest(
            applicationArn: applicationArn, 
            authenticationMethod: authenticationMethod, 
            authenticationMethodType: authenticationMethodType
        )
        return try await self.putApplicationAuthenticationMethod(input, logger: logger)
    }

    /// Creates a configuration for an application to use grants. Conceptually grants are authorization to request actions related to tokens. This configuration will be used when parties are requesting and receiving tokens during the trusted identity propagation process. For more information on the IAM Identity Center supported grant workflows, see SAML 2.0 and OAuth 2.0. A grant is created between your applications and Identity Center instance which enables an application to use specified mechanisms to obtain tokens. These tokens are used by your applications to gain access to Amazon Web Services resources on behalf of users. The following elements are within these exchanges:    Requester - The application requesting access to Amazon Web Services resources.    Subject - Typically the user that is requesting access to Amazon Web Services resources.    Grant - Conceptually, a grant is authorization to access Amazon Web Services resources. These grants authorize token generation for authenticating access to the requester and for the request to make requests on behalf of the subjects. There are four types of grants:    AuthorizationCode - Allows an application to request authorization through a series of user-agent redirects.    JWT bearer  - Authorizes an application to exchange a JSON Web Token that came from an external identity provider. To learn more, see RFC 6479.    Refresh token - Enables application to request new access tokens to replace expiring or expired access tokens.    Exchange token - A grant that requests tokens from the authorization server by providing a ‘subject’ token with access scope authorizing trusted identity propagation to this application. To learn more, see RFC 8693.      Authorization server - IAM Identity Center requests tokens.   User credentials are never shared directly within these exchanges. Instead, applications use grants to request access tokens from IAM Identity Center. For more information, see RFC 6479.  Use cases    Connecting to custom applications.   Configuring an Amazon Web Services service to make calls to another Amazon Web Services services using JWT tokens.
    @Sendable
    @inlinable
    public func putApplicationGrant(_ input: PutApplicationGrantRequest, logger: Logger = AWSClient.loggingDisabled) async throws {
        try await self.client.execute(
            operation: "PutApplicationGrant", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a configuration for an application to use grants. Conceptually grants are authorization to request actions related to tokens. This configuration will be used when parties are requesting and receiving tokens during the trusted identity propagation process. For more information on the IAM Identity Center supported grant workflows, see SAML 2.0 and OAuth 2.0. A grant is created between your applications and Identity Center instance which enables an application to use specified mechanisms to obtain tokens. These tokens are used by your applications to gain access to Amazon Web Services resources on behalf of users. The following elements are within these exchanges:    Requester - The application requesting access to Amazon Web Services resources.    Subject - Typically the user that is requesting access to Amazon Web Services resources.    Grant - Conceptually, a grant is authorization to access Amazon Web Services resources. These grants authorize token generation for authenticating access to the requester and for the request to make requests on behalf of the subjects. There are four types of grants:    AuthorizationCode - Allows an application to request authorization through a series of user-agent redirects.    JWT bearer  - Authorizes an application to exchange a JSON Web Token that came from an external identity provider. To learn more, see RFC 6479.    Refresh token - Enables application to request new access tokens to replace expiring or expired access tokens.    Exchange token - A grant that requests tokens from the authorization server by providing a ‘subject’ token with access scope authorizing trusted identity propagation to this application. To learn more, see RFC 8693.      Authorization server - IAM Identity Center requests tokens.   User credentials are never shared directly within these exchanges. Instead, applications use grants to request access tokens from IAM Identity Center. For more information, see RFC 6479.  Use cases    Connecting to custom applications.   Configuring an Amazon Web Services service to make calls to another Amazon Web Services services using JWT tokens.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application to update.
    ///   - grant: Specifies a structure that describes the grant to update.
    ///   - grantType: Specifies the type of grant to update.
    ///   - logger: Logger use during operation
    @inlinable
    public func putApplicationGrant(
        applicationArn: String,
        grant: Grant,
        grantType: GrantType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws {
        let input = PutApplicationGrantRequest(
            applicationArn: applicationArn, 
            grant: grant, 
            grantType: grantType
        )
        return try await self.putApplicationGrant(input, logger: logger)
    }

    /// Updates the session configuration for an application in IAM Identity Center. The session configuration determines how users can access an application. This includes whether user background sessions are enabled. User background sessions allow users to start a job on a supported Amazon Web Services managed application without having to remain signed in to an active session while the job runs.
    @Sendable
    @inlinable
    public func putApplicationSessionConfiguration(_ input: PutApplicationSessionConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutApplicationSessionConfigurationResponse {
        try await self.client.execute(
            operation: "PutApplicationSessionConfiguration", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the session configuration for an application in IAM Identity Center. The session configuration determines how users can access an application. This includes whether user background sessions are enabled. User background sessions allow users to start a job on a supported Amazon Web Services managed application without having to remain signed in to an active session while the job runs.
    ///
    /// Parameters:
    ///   - applicationArn: The Amazon Resource Name (ARN) of the application for which to update the session configuration.
    ///   - userBackgroundSessionApplicationStatus: The status of user background sessions for the application.
    ///   - logger: Logger use during operation
    @inlinable
    public func putApplicationSessionConfiguration(
        applicationArn: String,
        userBackgroundSessionApplicationStatus: UserBackgroundSessionApplicationStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutApplicationSessionConfigurationResponse {
        let input = PutApplicationSessionConfigurationRequest(
            applicationArn: applicationArn, 
            userBackgroundSessionApplicationStatus: userBackgroundSessionApplicationStatus
        )
        return try await self.putApplicationSessionConfiguration(input, logger: logger)
    }

    /// Attaches an inline policy to a permission set.  If the permission set is already referenced by one or more account assignments, you will need to call  ProvisionPermissionSet  after this action to apply the corresponding IAM policy updates to all assigned accounts.
    @Sendable
    @inlinable
    public func putInlinePolicyToPermissionSet(_ input: PutInlinePolicyToPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutInlinePolicyToPermissionSetResponse {
        try await self.client.execute(
            operation: "PutInlinePolicyToPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches an inline policy to a permission set.  If the permission set is already referenced by one or more account assignments, you will need to call  ProvisionPermissionSet  after this action to apply the corresponding IAM policy updates to all assigned accounts.
    ///
    /// Parameters:
    ///   - inlinePolicy: The inline policy to attach to a PermissionSet.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - permissionSetArn: The ARN of the permission set.
    ///   - logger: Logger use during operation
    @inlinable
    public func putInlinePolicyToPermissionSet(
        inlinePolicy: String,
        instanceArn: String,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutInlinePolicyToPermissionSetResponse {
        let input = PutInlinePolicyToPermissionSetRequest(
            inlinePolicy: inlinePolicy, 
            instanceArn: instanceArn, 
            permissionSetArn: permissionSetArn
        )
        return try await self.putInlinePolicyToPermissionSet(input, logger: logger)
    }

    /// Attaches an Amazon Web Services managed or customer managed policy to the specified PermissionSet as a permissions boundary.
    @Sendable
    @inlinable
    public func putPermissionsBoundaryToPermissionSet(_ input: PutPermissionsBoundaryToPermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutPermissionsBoundaryToPermissionSetResponse {
        try await self.client.execute(
            operation: "PutPermissionsBoundaryToPermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches an Amazon Web Services managed or customer managed policy to the specified PermissionSet as a permissions boundary.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed.
    ///   - permissionsBoundary: The permissions boundary that you want to attach to a PermissionSet.
    ///   - permissionSetArn: The ARN of the PermissionSet.
    ///   - logger: Logger use during operation
    @inlinable
    public func putPermissionsBoundaryToPermissionSet(
        instanceArn: String,
        permissionsBoundary: PermissionsBoundary,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutPermissionsBoundaryToPermissionSetResponse {
        let input = PutPermissionsBoundaryToPermissionSetRequest(
            instanceArn: instanceArn, 
            permissionsBoundary: permissionsBoundary, 
            permissionSetArn: permissionSetArn
        )
        return try await self.putPermissionsBoundaryToPermissionSet(input, logger: logger)
    }

    /// Associates a set of tags with a specified resource.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Associates a set of tags with a specified resource.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - resourceArn: The ARN of the resource with the tags to be listed.
    ///   - tags: A set of key-value pairs that are used to manage the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        instanceArn: String? = nil,
        resourceArn: String,
        tags: [Tag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            instanceArn: instanceArn, 
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Disassociates a set of tags from a specified resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disassociates a set of tags from a specified resource.
    ///
    /// Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - resourceArn: The ARN of the resource with the tags to be listed.
    ///   - tagKeys: The keys of tags that are attached to the resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        instanceArn: String? = nil,
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            instanceArn: instanceArn, 
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates application properties.
    @Sendable
    @inlinable
    public func updateApplication(_ input: UpdateApplicationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateApplicationResponse {
        try await self.client.execute(
            operation: "UpdateApplication", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates application properties.
    ///
    /// Parameters:
    ///   - applicationArn: Specifies the ARN of the application. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - description: The description of the .
    ///   - name: Specifies the updated name for the application.
    ///   - portalOptions: A structure that describes the options for the portal associated with an application.
    ///   - status: Specifies whether the application is enabled or disabled.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateApplication(
        applicationArn: String,
        description: String? = nil,
        name: String? = nil,
        portalOptions: UpdateApplicationPortalOptions? = nil,
        status: ApplicationStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateApplicationResponse {
        let input = UpdateApplicationRequest(
            applicationArn: applicationArn, 
            description: description, 
            name: name, 
            portalOptions: portalOptions, 
            status: status
        )
        return try await self.updateApplication(input, logger: logger)
    }

    /// Update the details for the instance of IAM Identity Center that is owned by the Amazon Web Services account.
    @Sendable
    @inlinable
    public func updateInstance(_ input: UpdateInstanceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateInstanceResponse {
        try await self.client.execute(
            operation: "UpdateInstance", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update the details for the instance of IAM Identity Center that is owned by the Amazon Web Services account.
    ///
    /// Parameters:
    ///   - encryptionConfiguration: Specifies the encryption configuration for your IAM Identity Center instance. You can use this to configure customer managed KMS keys (CMK) or Amazon Web Services owned KMS keys for encrypting your instance data.
    ///   - instanceArn: The ARN of the instance of IAM Identity Center under which the operation will run. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - name: Updates the instance name.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateInstance(
        encryptionConfiguration: EncryptionConfiguration? = nil,
        instanceArn: String,
        name: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateInstanceResponse {
        let input = UpdateInstanceRequest(
            encryptionConfiguration: encryptionConfiguration, 
            instanceArn: instanceArn, 
            name: name
        )
        return try await self.updateInstance(input, logger: logger)
    }

    /// Updates the IAM Identity Center identity store attributes that you can use with the IAM Identity Center instance for attributes-based access control (ABAC). When using an external identity provider as an identity source, you can pass attributes through the SAML assertion as an alternative to configuring attributes from the IAM Identity Center identity store. If a SAML assertion passes any of these attributes, IAM Identity Center replaces the attribute value with the value from the IAM Identity Center identity store. For more information about ABAC, see Attribute-Based Access Control in the IAM Identity Center User Guide.
    @Sendable
    @inlinable
    public func updateInstanceAccessControlAttributeConfiguration(_ input: UpdateInstanceAccessControlAttributeConfigurationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateInstanceAccessControlAttributeConfigurationResponse {
        try await self.client.execute(
            operation: "UpdateInstanceAccessControlAttributeConfiguration", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the IAM Identity Center identity store attributes that you can use with the IAM Identity Center instance for attributes-based access control (ABAC). When using an external identity provider as an identity source, you can pass attributes through the SAML assertion as an alternative to configuring attributes from the IAM Identity Center identity store. If a SAML assertion passes any of these attributes, IAM Identity Center replaces the attribute value with the value from the IAM Identity Center identity store. For more information about ABAC, see Attribute-Based Access Control in the IAM Identity Center User Guide.
    ///
    /// Parameters:
    ///   - instanceAccessControlAttributeConfiguration: Updates the attributes for your ABAC configuration.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateInstanceAccessControlAttributeConfiguration(
        instanceAccessControlAttributeConfiguration: InstanceAccessControlAttributeConfiguration,
        instanceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateInstanceAccessControlAttributeConfigurationResponse {
        let input = UpdateInstanceAccessControlAttributeConfigurationRequest(
            instanceAccessControlAttributeConfiguration: instanceAccessControlAttributeConfiguration, 
            instanceArn: instanceArn
        )
        return try await self.updateInstanceAccessControlAttributeConfiguration(input, logger: logger)
    }

    /// Updates an existing permission set.
    @Sendable
    @inlinable
    public func updatePermissionSet(_ input: UpdatePermissionSetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdatePermissionSetResponse {
        try await self.client.execute(
            operation: "UpdatePermissionSet", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing permission set.
    ///
    /// Parameters:
    ///   - description: The description of the PermissionSet.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - permissionSetArn: The ARN of the permission set.
    ///   - relayState: Used to redirect users within the application during the federation authentication process.
    ///   - sessionDuration: The length of time that the application user sessions are valid for in the ISO-8601 standard.
    ///   - logger: Logger use during operation
    @inlinable
    public func updatePermissionSet(
        description: String? = nil,
        instanceArn: String,
        permissionSetArn: String,
        relayState: String? = nil,
        sessionDuration: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdatePermissionSetResponse {
        let input = UpdatePermissionSetRequest(
            description: description, 
            instanceArn: instanceArn, 
            permissionSetArn: permissionSetArn, 
            relayState: relayState, 
            sessionDuration: sessionDuration
        )
        return try await self.updatePermissionSet(input, logger: logger)
    }

    /// Updates the name of the trusted token issuer, or the path of a source attribute or destination attribute for a trusted token issuer configuration.  Updating this trusted token issuer configuration might cause users to lose access to any applications that are configured to use the trusted token issuer.
    @Sendable
    @inlinable
    public func updateTrustedTokenIssuer(_ input: UpdateTrustedTokenIssuerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateTrustedTokenIssuerResponse {
        try await self.client.execute(
            operation: "UpdateTrustedTokenIssuer", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the name of the trusted token issuer, or the path of a source attribute or destination attribute for a trusted token issuer configuration.  Updating this trusted token issuer configuration might cause users to lose access to any applications that are configured to use the trusted token issuer.
    ///
    /// Parameters:
    ///   - name: Specifies the updated name to be applied to the trusted token issuer configuration.
    ///   - trustedTokenIssuerArn: Specifies the ARN of the trusted token issuer configuration that you want to update.
    ///   - trustedTokenIssuerConfiguration: Specifies a structure with settings to apply to the specified trusted token issuer. The settings that you can provide are determined by the type of the trusted token issuer that you are updating.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateTrustedTokenIssuer(
        name: String? = nil,
        trustedTokenIssuerArn: String,
        trustedTokenIssuerConfiguration: TrustedTokenIssuerUpdateConfiguration? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateTrustedTokenIssuerResponse {
        let input = UpdateTrustedTokenIssuerRequest(
            name: name, 
            trustedTokenIssuerArn: trustedTokenIssuerArn, 
            trustedTokenIssuerConfiguration: trustedTokenIssuerConfiguration
        )
        return try await self.updateTrustedTokenIssuer(input, logger: logger)
    }
}

extension SSOAdmin {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: SSOAdmin, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension SSOAdmin {
    /// Return PaginatorSequence for operation ``listAccountAssignmentCreationStatus(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccountAssignmentCreationStatusPaginator(
        _ input: ListAccountAssignmentCreationStatusRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAccountAssignmentCreationStatusRequest, ListAccountAssignmentCreationStatusResponse> {
        return .init(
            input: input,
            command: self.listAccountAssignmentCreationStatus,
            inputKey: \ListAccountAssignmentCreationStatusRequest.nextToken,
            outputKey: \ListAccountAssignmentCreationStatusResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAccountAssignmentCreationStatus(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters results based on the passed attribute value.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the assignment.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccountAssignmentCreationStatusPaginator(
        filter: OperationStatusFilter? = nil,
        instanceArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAccountAssignmentCreationStatusRequest, ListAccountAssignmentCreationStatusResponse> {
        let input = ListAccountAssignmentCreationStatusRequest(
            filter: filter, 
            instanceArn: instanceArn, 
            maxResults: maxResults
        )
        return self.listAccountAssignmentCreationStatusPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAccountAssignmentDeletionStatus(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccountAssignmentDeletionStatusPaginator(
        _ input: ListAccountAssignmentDeletionStatusRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAccountAssignmentDeletionStatusRequest, ListAccountAssignmentDeletionStatusResponse> {
        return .init(
            input: input,
            command: self.listAccountAssignmentDeletionStatus,
            inputKey: \ListAccountAssignmentDeletionStatusRequest.nextToken,
            outputKey: \ListAccountAssignmentDeletionStatusResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAccountAssignmentDeletionStatus(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters results based on the passed attribute value.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the assignment.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccountAssignmentDeletionStatusPaginator(
        filter: OperationStatusFilter? = nil,
        instanceArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAccountAssignmentDeletionStatusRequest, ListAccountAssignmentDeletionStatusResponse> {
        let input = ListAccountAssignmentDeletionStatusRequest(
            filter: filter, 
            instanceArn: instanceArn, 
            maxResults: maxResults
        )
        return self.listAccountAssignmentDeletionStatusPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAccountAssignments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccountAssignmentsPaginator(
        _ input: ListAccountAssignmentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAccountAssignmentsRequest, ListAccountAssignmentsResponse> {
        return .init(
            input: input,
            command: self.listAccountAssignments,
            inputKey: \ListAccountAssignmentsRequest.nextToken,
            outputKey: \ListAccountAssignmentsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAccountAssignments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - accountId: The identifier of the Amazon Web Services account from which to list the assignments.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the assignment.
    ///   - permissionSetArn: The ARN of the permission set from which to list assignments.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccountAssignmentsPaginator(
        accountId: String,
        instanceArn: String,
        maxResults: Int? = nil,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAccountAssignmentsRequest, ListAccountAssignmentsResponse> {
        let input = ListAccountAssignmentsRequest(
            accountId: accountId, 
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            permissionSetArn: permissionSetArn
        )
        return self.listAccountAssignmentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAccountAssignmentsForPrincipal(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccountAssignmentsForPrincipalPaginator(
        _ input: ListAccountAssignmentsForPrincipalRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAccountAssignmentsForPrincipalRequest, ListAccountAssignmentsForPrincipalResponse> {
        return .init(
            input: input,
            command: self.listAccountAssignmentsForPrincipal,
            inputKey: \ListAccountAssignmentsForPrincipalRequest.nextToken,
            outputKey: \ListAccountAssignmentsForPrincipalResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAccountAssignmentsForPrincipal(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Specifies an Amazon Web Services account ID number. Results are filtered to only those that match this ID number.
    ///   - instanceArn: Specifies the ARN of the instance of IAM Identity Center that contains the principal.
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - principalId: Specifies the principal for which you want to retrieve the list of account assignments.
    ///   - principalType: Specifies the type of the principal.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccountAssignmentsForPrincipalPaginator(
        filter: ListAccountAssignmentsFilter? = nil,
        instanceArn: String,
        maxResults: Int? = nil,
        principalId: String,
        principalType: PrincipalType,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAccountAssignmentsForPrincipalRequest, ListAccountAssignmentsForPrincipalResponse> {
        let input = ListAccountAssignmentsForPrincipalRequest(
            filter: filter, 
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            principalId: principalId, 
            principalType: principalType
        )
        return self.listAccountAssignmentsForPrincipalPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listAccountsForProvisionedPermissionSet(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccountsForProvisionedPermissionSetPaginator(
        _ input: ListAccountsForProvisionedPermissionSetRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListAccountsForProvisionedPermissionSetRequest, ListAccountsForProvisionedPermissionSetResponse> {
        return .init(
            input: input,
            command: self.listAccountsForProvisionedPermissionSet,
            inputKey: \ListAccountsForProvisionedPermissionSetRequest.nextToken,
            outputKey: \ListAccountsForProvisionedPermissionSetResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listAccountsForProvisionedPermissionSet(_:logger:)``.
    ///
    /// - Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the PermissionSet.
    ///   - permissionSetArn: The ARN of the PermissionSet from which the associated Amazon Web Services accounts will be listed.
    ///   - provisioningStatus: The permission set provisioning status for an Amazon Web Services account.
    ///   - logger: Logger used for logging
    @inlinable
    public func listAccountsForProvisionedPermissionSetPaginator(
        instanceArn: String,
        maxResults: Int? = nil,
        permissionSetArn: String,
        provisioningStatus: ProvisioningStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListAccountsForProvisionedPermissionSetRequest, ListAccountsForProvisionedPermissionSetResponse> {
        let input = ListAccountsForProvisionedPermissionSetRequest(
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            permissionSetArn: permissionSetArn, 
            provisioningStatus: provisioningStatus
        )
        return self.listAccountsForProvisionedPermissionSetPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listApplicationAccessScopes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationAccessScopesPaginator(
        _ input: ListApplicationAccessScopesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListApplicationAccessScopesRequest, ListApplicationAccessScopesResponse> {
        return .init(
            input: input,
            command: self.listApplicationAccessScopes,
            inputKey: \ListApplicationAccessScopesRequest.nextToken,
            outputKey: \ListApplicationAccessScopesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listApplicationAccessScopes(_:logger:)``.
    ///
    /// - Parameters:
    ///   - applicationArn: Specifies the ARN of the application.
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationAccessScopesPaginator(
        applicationArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListApplicationAccessScopesRequest, ListApplicationAccessScopesResponse> {
        let input = ListApplicationAccessScopesRequest(
            applicationArn: applicationArn, 
            maxResults: maxResults
        )
        return self.listApplicationAccessScopesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listApplicationAssignments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationAssignmentsPaginator(
        _ input: ListApplicationAssignmentsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListApplicationAssignmentsRequest, ListApplicationAssignmentsResponse> {
        return .init(
            input: input,
            command: self.listApplicationAssignments,
            inputKey: \ListApplicationAssignmentsRequest.nextToken,
            outputKey: \ListApplicationAssignmentsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listApplicationAssignments(_:logger:)``.
    ///
    /// - Parameters:
    ///   - applicationArn: Specifies the ARN of the application.
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationAssignmentsPaginator(
        applicationArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListApplicationAssignmentsRequest, ListApplicationAssignmentsResponse> {
        let input = ListApplicationAssignmentsRequest(
            applicationArn: applicationArn, 
            maxResults: maxResults
        )
        return self.listApplicationAssignmentsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listApplicationAssignmentsForPrincipal(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationAssignmentsForPrincipalPaginator(
        _ input: ListApplicationAssignmentsForPrincipalRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListApplicationAssignmentsForPrincipalRequest, ListApplicationAssignmentsForPrincipalResponse> {
        return .init(
            input: input,
            command: self.listApplicationAssignmentsForPrincipal,
            inputKey: \ListApplicationAssignmentsForPrincipalRequest.nextToken,
            outputKey: \ListApplicationAssignmentsForPrincipalResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listApplicationAssignmentsForPrincipal(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the output to include only assignments associated with the application that has the specified ARN.
    ///   - instanceArn: Specifies the instance of IAM Identity Center that contains principal and applications.
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - principalId: Specifies the unique identifier of the principal for which you want to retrieve its assignments.
    ///   - principalType: Specifies the type of the principal for which you want to retrieve its assignments.
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationAssignmentsForPrincipalPaginator(
        filter: ListApplicationAssignmentsFilter? = nil,
        instanceArn: String,
        maxResults: Int? = nil,
        principalId: String,
        principalType: PrincipalType,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListApplicationAssignmentsForPrincipalRequest, ListApplicationAssignmentsForPrincipalResponse> {
        let input = ListApplicationAssignmentsForPrincipalRequest(
            filter: filter, 
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            principalId: principalId, 
            principalType: principalType
        )
        return self.listApplicationAssignmentsForPrincipalPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listApplicationAuthenticationMethods(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationAuthenticationMethodsPaginator(
        _ input: ListApplicationAuthenticationMethodsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListApplicationAuthenticationMethodsRequest, ListApplicationAuthenticationMethodsResponse> {
        return .init(
            input: input,
            command: self.listApplicationAuthenticationMethods,
            inputKey: \ListApplicationAuthenticationMethodsRequest.nextToken,
            outputKey: \ListApplicationAuthenticationMethodsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listApplicationAuthenticationMethods(_:logger:)``.
    ///
    /// - Parameters:
    ///   - applicationArn: Specifies the ARN of the application with the authentication methods you want to list.
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationAuthenticationMethodsPaginator(
        applicationArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListApplicationAuthenticationMethodsRequest, ListApplicationAuthenticationMethodsResponse> {
        let input = ListApplicationAuthenticationMethodsRequest(
            applicationArn: applicationArn
        )
        return self.listApplicationAuthenticationMethodsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listApplicationGrants(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationGrantsPaginator(
        _ input: ListApplicationGrantsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListApplicationGrantsRequest, ListApplicationGrantsResponse> {
        return .init(
            input: input,
            command: self.listApplicationGrants,
            inputKey: \ListApplicationGrantsRequest.nextToken,
            outputKey: \ListApplicationGrantsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listApplicationGrants(_:logger:)``.
    ///
    /// - Parameters:
    ///   - applicationArn: Specifies the ARN of the application whose grants you want to list.
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationGrantsPaginator(
        applicationArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListApplicationGrantsRequest, ListApplicationGrantsResponse> {
        let input = ListApplicationGrantsRequest(
            applicationArn: applicationArn
        )
        return self.listApplicationGrantsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listApplicationProviders(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationProvidersPaginator(
        _ input: ListApplicationProvidersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListApplicationProvidersRequest, ListApplicationProvidersResponse> {
        return .init(
            input: input,
            command: self.listApplicationProviders,
            inputKey: \ListApplicationProvidersRequest.nextToken,
            outputKey: \ListApplicationProvidersResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listApplicationProviders(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationProvidersPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListApplicationProvidersRequest, ListApplicationProvidersResponse> {
        let input = ListApplicationProvidersRequest(
            maxResults: maxResults
        )
        return self.listApplicationProvidersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listApplications(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationsPaginator(
        _ input: ListApplicationsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListApplicationsRequest, ListApplicationsResponse> {
        return .init(
            input: input,
            command: self.listApplications,
            inputKey: \ListApplicationsRequest.nextToken,
            outputKey: \ListApplicationsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listApplications(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters response results.
    ///   - instanceArn: The ARN of the IAM Identity Center application under which the operation will run. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listApplicationsPaginator(
        filter: ListApplicationsFilter? = nil,
        instanceArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListApplicationsRequest, ListApplicationsResponse> {
        let input = ListApplicationsRequest(
            filter: filter, 
            instanceArn: instanceArn, 
            maxResults: maxResults
        )
        return self.listApplicationsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listCustomerManagedPolicyReferencesInPermissionSet(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomerManagedPolicyReferencesInPermissionSetPaginator(
        _ input: ListCustomerManagedPolicyReferencesInPermissionSetRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListCustomerManagedPolicyReferencesInPermissionSetRequest, ListCustomerManagedPolicyReferencesInPermissionSetResponse> {
        return .init(
            input: input,
            command: self.listCustomerManagedPolicyReferencesInPermissionSet,
            inputKey: \ListCustomerManagedPolicyReferencesInPermissionSetRequest.nextToken,
            outputKey: \ListCustomerManagedPolicyReferencesInPermissionSetResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listCustomerManagedPolicyReferencesInPermissionSet(_:logger:)``.
    ///
    /// - Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed.
    ///   - maxResults: The maximum number of results to display for the list call.
    ///   - permissionSetArn: The ARN of the PermissionSet.
    ///   - logger: Logger used for logging
    @inlinable
    public func listCustomerManagedPolicyReferencesInPermissionSetPaginator(
        instanceArn: String,
        maxResults: Int? = nil,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListCustomerManagedPolicyReferencesInPermissionSetRequest, ListCustomerManagedPolicyReferencesInPermissionSetResponse> {
        let input = ListCustomerManagedPolicyReferencesInPermissionSetRequest(
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            permissionSetArn: permissionSetArn
        )
        return self.listCustomerManagedPolicyReferencesInPermissionSetPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listInstances(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listInstancesPaginator(
        _ input: ListInstancesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListInstancesRequest, ListInstancesResponse> {
        return .init(
            input: input,
            command: self.listInstances,
            inputKey: \ListInstancesRequest.nextToken,
            outputKey: \ListInstancesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listInstances(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to display for the instance.
    ///   - logger: Logger used for logging
    @inlinable
    public func listInstancesPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListInstancesRequest, ListInstancesResponse> {
        let input = ListInstancesRequest(
            maxResults: maxResults
        )
        return self.listInstancesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listManagedPoliciesInPermissionSet(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listManagedPoliciesInPermissionSetPaginator(
        _ input: ListManagedPoliciesInPermissionSetRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListManagedPoliciesInPermissionSetRequest, ListManagedPoliciesInPermissionSetResponse> {
        return .init(
            input: input,
            command: self.listManagedPoliciesInPermissionSet,
            inputKey: \ListManagedPoliciesInPermissionSetRequest.nextToken,
            outputKey: \ListManagedPoliciesInPermissionSetResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listManagedPoliciesInPermissionSet(_:logger:)``.
    ///
    /// - Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the PermissionSet.
    ///   - permissionSetArn: The ARN of the PermissionSet whose managed policies will be listed.
    ///   - logger: Logger used for logging
    @inlinable
    public func listManagedPoliciesInPermissionSetPaginator(
        instanceArn: String,
        maxResults: Int? = nil,
        permissionSetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListManagedPoliciesInPermissionSetRequest, ListManagedPoliciesInPermissionSetResponse> {
        let input = ListManagedPoliciesInPermissionSetRequest(
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            permissionSetArn: permissionSetArn
        )
        return self.listManagedPoliciesInPermissionSetPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listPermissionSetProvisioningStatus(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listPermissionSetProvisioningStatusPaginator(
        _ input: ListPermissionSetProvisioningStatusRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListPermissionSetProvisioningStatusRequest, ListPermissionSetProvisioningStatusResponse> {
        return .init(
            input: input,
            command: self.listPermissionSetProvisioningStatus,
            inputKey: \ListPermissionSetProvisioningStatusRequest.nextToken,
            outputKey: \ListPermissionSetProvisioningStatusResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listPermissionSetProvisioningStatus(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters results based on the passed attribute value.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the assignment.
    ///   - logger: Logger used for logging
    @inlinable
    public func listPermissionSetProvisioningStatusPaginator(
        filter: OperationStatusFilter? = nil,
        instanceArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListPermissionSetProvisioningStatusRequest, ListPermissionSetProvisioningStatusResponse> {
        let input = ListPermissionSetProvisioningStatusRequest(
            filter: filter, 
            instanceArn: instanceArn, 
            maxResults: maxResults
        )
        return self.listPermissionSetProvisioningStatusPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listPermissionSets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listPermissionSetsPaginator(
        _ input: ListPermissionSetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListPermissionSetsRequest, ListPermissionSetsResponse> {
        return .init(
            input: input,
            command: self.listPermissionSets,
            inputKey: \ListPermissionSetsRequest.nextToken,
            outputKey: \ListPermissionSetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listPermissionSets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the assignment.
    ///   - logger: Logger used for logging
    @inlinable
    public func listPermissionSetsPaginator(
        instanceArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListPermissionSetsRequest, ListPermissionSetsResponse> {
        let input = ListPermissionSetsRequest(
            instanceArn: instanceArn, 
            maxResults: maxResults
        )
        return self.listPermissionSetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listPermissionSetsProvisionedToAccount(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listPermissionSetsProvisionedToAccountPaginator(
        _ input: ListPermissionSetsProvisionedToAccountRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListPermissionSetsProvisionedToAccountRequest, ListPermissionSetsProvisionedToAccountResponse> {
        return .init(
            input: input,
            command: self.listPermissionSetsProvisionedToAccount,
            inputKey: \ListPermissionSetsProvisionedToAccountRequest.nextToken,
            outputKey: \ListPermissionSetsProvisionedToAccountResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listPermissionSetsProvisionedToAccount(_:logger:)``.
    ///
    /// - Parameters:
    ///   - accountId: The identifier of the Amazon Web Services account from which to list the assignments.
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - maxResults: The maximum number of results to display for the assignment.
    ///   - provisioningStatus: The status object for the permission set provisioning operation.
    ///   - logger: Logger used for logging
    @inlinable
    public func listPermissionSetsProvisionedToAccountPaginator(
        accountId: String,
        instanceArn: String,
        maxResults: Int? = nil,
        provisioningStatus: ProvisioningStatus? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListPermissionSetsProvisionedToAccountRequest, ListPermissionSetsProvisionedToAccountResponse> {
        let input = ListPermissionSetsProvisionedToAccountRequest(
            accountId: accountId, 
            instanceArn: instanceArn, 
            maxResults: maxResults, 
            provisioningStatus: provisioningStatus
        )
        return self.listPermissionSetsProvisionedToAccountPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTagsForResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTagsForResourcePaginator(
        _ input: ListTagsForResourceRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTagsForResourceRequest, ListTagsForResourceResponse> {
        return .init(
            input: input,
            command: self.listTagsForResource,
            inputKey: \ListTagsForResourceRequest.nextToken,
            outputKey: \ListTagsForResourceResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTagsForResource(_:logger:)``.
    ///
    /// - Parameters:
    ///   - instanceArn: The ARN of the IAM Identity Center instance under which the operation will be executed. For more information about ARNs, see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces in the Amazon Web Services General Reference.
    ///   - resourceArn: The ARN of the resource with the tags to be listed.
    ///   - logger: Logger used for logging
    @inlinable
    public func listTagsForResourcePaginator(
        instanceArn: String? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTagsForResourceRequest, ListTagsForResourceResponse> {
        let input = ListTagsForResourceRequest(
            instanceArn: instanceArn, 
            resourceArn: resourceArn
        )
        return self.listTagsForResourcePaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTrustedTokenIssuers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTrustedTokenIssuersPaginator(
        _ input: ListTrustedTokenIssuersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTrustedTokenIssuersRequest, ListTrustedTokenIssuersResponse> {
        return .init(
            input: input,
            command: self.listTrustedTokenIssuers,
            inputKey: \ListTrustedTokenIssuersRequest.nextToken,
            outputKey: \ListTrustedTokenIssuersResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTrustedTokenIssuers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - instanceArn: Specifies the ARN of the instance of IAM Identity Center with the trusted token issuer configurations that you want to list.
    ///   - maxResults: Specifies the total number of results that you want included in each response. If additional items exist beyond the number you specify, the NextToken response element is returned with a value (not null). Include the specified value as the NextToken request parameter in the next call to the operation to get the next set of results. Note that the service might return fewer results than the maximum even when there are more results available. You should check NextToken after every operation to ensure that you receive all of the results.
    ///   - logger: Logger used for logging
    @inlinable
    public func listTrustedTokenIssuersPaginator(
        instanceArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTrustedTokenIssuersRequest, ListTrustedTokenIssuersResponse> {
        let input = ListTrustedTokenIssuersRequest(
            instanceArn: instanceArn, 
            maxResults: maxResults
        )
        return self.listTrustedTokenIssuersPaginator(input, logger: logger)
    }
}

extension SSOAdmin.ListAccountAssignmentCreationStatusRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListAccountAssignmentCreationStatusRequest {
        return .init(
            filter: self.filter,
            instanceArn: self.instanceArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSOAdmin.ListAccountAssignmentDeletionStatusRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListAccountAssignmentDeletionStatusRequest {
        return .init(
            filter: self.filter,
            instanceArn: self.instanceArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSOAdmin.ListAccountAssignmentsForPrincipalRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListAccountAssignmentsForPrincipalRequest {
        return .init(
            filter: self.filter,
            instanceArn: self.instanceArn,
            maxResults: self.maxResults,
            nextToken: token,
            principalId: self.principalId,
            principalType: self.principalType
        )
    }
}

extension SSOAdmin.ListAccountAssignmentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListAccountAssignmentsRequest {
        return .init(
            accountId: self.accountId,
            instanceArn: self.instanceArn,
            maxResults: self.maxResults,
            nextToken: token,
            permissionSetArn: self.permissionSetArn
        )
    }
}

extension SSOAdmin.ListAccountsForProvisionedPermissionSetRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListAccountsForProvisionedPermissionSetRequest {
        return .init(
            instanceArn: self.instanceArn,
            maxResults: self.maxResults,
            nextToken: token,
            permissionSetArn: self.permissionSetArn,
            provisioningStatus: self.provisioningStatus
        )
    }
}

extension SSOAdmin.ListApplicationAccessScopesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListApplicationAccessScopesRequest {
        return .init(
            applicationArn: self.applicationArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSOAdmin.ListApplicationAssignmentsForPrincipalRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListApplicationAssignmentsForPrincipalRequest {
        return .init(
            filter: self.filter,
            instanceArn: self.instanceArn,
            maxResults: self.maxResults,
            nextToken: token,
            principalId: self.principalId,
            principalType: self.principalType
        )
    }
}

extension SSOAdmin.ListApplicationAssignmentsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListApplicationAssignmentsRequest {
        return .init(
            applicationArn: self.applicationArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSOAdmin.ListApplicationAuthenticationMethodsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListApplicationAuthenticationMethodsRequest {
        return .init(
            applicationArn: self.applicationArn,
            nextToken: token
        )
    }
}

extension SSOAdmin.ListApplicationGrantsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListApplicationGrantsRequest {
        return .init(
            applicationArn: self.applicationArn,
            nextToken: token
        )
    }
}

extension SSOAdmin.ListApplicationProvidersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListApplicationProvidersRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSOAdmin.ListApplicationsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListApplicationsRequest {
        return .init(
            filter: self.filter,
            instanceArn: self.instanceArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSOAdmin.ListCustomerManagedPolicyReferencesInPermissionSetRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListCustomerManagedPolicyReferencesInPermissionSetRequest {
        return .init(
            instanceArn: self.instanceArn,
            maxResults: self.maxResults,
            nextToken: token,
            permissionSetArn: self.permissionSetArn
        )
    }
}

extension SSOAdmin.ListInstancesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListInstancesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSOAdmin.ListManagedPoliciesInPermissionSetRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListManagedPoliciesInPermissionSetRequest {
        return .init(
            instanceArn: self.instanceArn,
            maxResults: self.maxResults,
            nextToken: token,
            permissionSetArn: self.permissionSetArn
        )
    }
}

extension SSOAdmin.ListPermissionSetProvisioningStatusRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListPermissionSetProvisioningStatusRequest {
        return .init(
            filter: self.filter,
            instanceArn: self.instanceArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSOAdmin.ListPermissionSetsProvisionedToAccountRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListPermissionSetsProvisionedToAccountRequest {
        return .init(
            accountId: self.accountId,
            instanceArn: self.instanceArn,
            maxResults: self.maxResults,
            nextToken: token,
            provisioningStatus: self.provisioningStatus
        )
    }
}

extension SSOAdmin.ListPermissionSetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListPermissionSetsRequest {
        return .init(
            instanceArn: self.instanceArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension SSOAdmin.ListTagsForResourceRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListTagsForResourceRequest {
        return .init(
            instanceArn: self.instanceArn,
            nextToken: token,
            resourceArn: self.resourceArn
        )
    }
}

extension SSOAdmin.ListTrustedTokenIssuersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> SSOAdmin.ListTrustedTokenIssuersRequest {
        return .init(
            instanceArn: self.instanceArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}
